ゴリラ セッションを使用したリクエスト間でセッション変数が維持されない
この問題は、セッション変数の管理にゴリラ セッション ミドルウェアを使用する場合に発生する可能性があります。提供されているコード スニペットは、セッションの永続性に影響を与える可能性のあるいくつかの要因を強調しています:
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 サイトの他の関連記事を参照してください。