Gorilla セッションを使用したセッション処理に関するサポートのリクエストで、リクエスト間でセッション値が維持されない問題について説明しました。 .
潜在的な問題の 1 つは、セッション ストアに設定しているパスにあります。パスを /loginSession に設定すると、セッションの有効性がその特定のパスに制限されます。すべてのパスでセッションの一貫性を確保するには、代わりにパスを / に設定する必要があります。
store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, HttpOnly: true, }
考慮すべきもう 1 つの点は、セッション値を確認する方法です。 session.Values["email"] == nil を使用する代わりに、値を文字列にアサートして空の値を正しく処理する必要があります:
if val, ok := session.Values["email"].(string); ok { // if val is a string switch val { case "": http.Redirect(res, req, "html/login.html", http.StatusFound) default: http.Redirect(res, req, "html/home.html", http.StatusFound) } } else { // if val is not a string type http.Redirect(res, req, "html/login.html", http.StatusFound) }
また、セッションを保存するときにエラーをチェックする必要があります:
err := sessionNew.Save(req, res) if err != nil { // handle the error case }
最後に、SessionHandler 関数で静的ファイルを提供する前に、セッションを取得して検証していることを確認します。
func SessionHandler(res http.ResponseWriter, req *http.Request) { session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } if session.Values["email"] == nil { http.Redirect(res, req, "html/login.html", http.StatusFound) } else { http.Redirect(res, req, "html/home.html", http.StatusFound) } }
これらの問題に対処することで、次のことが確実にできるはずです。セッション変数は、Gorilla セッションを使用するリクエスト間で正しく保持されます。
以上がGorilla セッションを使用してセッション変数が保存されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。