Gorilla セッションを使用する場合、リクエスト間でセッション変数が維持されません。ログインとセッション変数の保存が成功したにもかかわらず、アプリはユーザーをログイン ページに誘導します。
1.正しいパス構成:
パスが「/loginSession」に設定されているため、セッション ストアには他のパスからアクセスできません。アプリケーション全体でセッションにアクセスできるようにするには、これを「/」に変更します。
2.セッション値の検証:
session.Values["email"] を nil と比較しません。代わりに、値を文字列にアサートし、val == "".
3 を使用して空かどうかを確認します。エラー処理:
err := sessionNew.Save(req, res).
4 を使用してセッションを保存するときにエラーが処理されるようにします。 SessionHandler でのセッションの検証:
SessionHandler で静的ファイルを提供する前にセッションを検証します。電子メール セッション値が存在しない場合は、ユーザーをログインにリダイレクトします。
コード修正:
初期化関数:
<code class="go">func init() { store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, // 8 hours HttpOnly: true, } }</code>
SessionHandler:
<code class="go">func SessionHandler(res http.ResponseWriter, req *http.Request) { session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } if session.Values["email"] == "" { http.Redirect(res, req, "html/login.html", http.StatusFound) } else { http.Redirect(res, req, "html/home.html", http.StatusFound) } }</code>
セキュリティに関する推奨事項:
さらに、パスワード ハッシュに bcrypt を使用し、SQL クエリをパラメータ化して回避することが重要です。潜在的な脆弱性。
以上がGo アプリケーションのリクエスト間でゴリラ セッションが保持されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。