ホームページ >バックエンド開発 >Golang >Gorilla セッションを使用してセッション変数が保存されないのはなぜですか?

Gorilla セッションを使用してセッション変数が保存されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 00:22:02574ブラウズ

Why are my session variables not being preserved using Gorilla Sessions?

Gorilla セッションを使用するとセッション変数が保存されない

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。