ホームページ > バックエンド開発 > Golang > セッション変数が、Gorilla セッションを使用するリクエスト間で持続しないのはなぜですか?

セッション変数が、Gorilla セッションを使用するリクエスト間で持続しないのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-03 20:49:03
オリジナル
1010 人が閲覧しました

Why Are My Session Variables Not Persistent Across Requests Using Gorilla Sessions?

ゴリラ セッションを使用したリクエスト間でセッション変数が維持されない

この問題は、セッション変数の管理にゴリラ セッション ミドルウェアを使用する場合に発生する可能性があります。提供されているコード スニペットは、セッションの永続性に影響を与える可能性のあるいくつかの要因を強調しています:

1.セッション パスの構成

このコードは、セッション パスを「/loginSession」として設定します。その結果、セッションは「/loginSession」パス内でのみ有効になります。すべてのルートでセッションを利用できるようにするには、パスを「/」:

<code class="go">func init() {
    store.Options = &sessions.Options{
        Domain:   "localhost",
        Path:     "/",
        MaxAge:   3600 * 8, // 8 hours
        HttpOnly: true,
    }
}</code>
ログイン後にコピー

2 に設定する必要があります。空の文字列の比較

コードは、session.Values["email"] == nil かどうかをチェックして、値が空の文字列かどうかを判断します。ただし、空の文字列を nil と比較するのは正しくありません。代わりに、型アサーションを使用して空の文字列をチェックします:

<code class="go">if val, ok := session.Values["email"].(string); ok {
    if val == "" {
        // Do something...
    }
}</code>
ログイン後にコピー

3。エラーの処理

セッションの保存中にエラーを処理することが重要です。

<code class="go">err := sessionNew.Save(req, res)
if err != nil {
    // Handle the error
}</code>
ログイン後にコピー

4.セッション検証順序

コードは、SessionHandler 関数でセッションを検証する前に静的ファイルを提供します。セッションを適切に検証するには、最初にセッションを検証する必要があります:

<code class="go">func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Validate the session here...

    // Serve static files if the session is valid...
}</code>
ログイン後にコピー

以上がセッション変数が、Gorilla セッションを使用するリクエスト間で持続しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート