ホームページ > バックエンド開発 > Golang > Go アプリケーションのリクエスト間でゴリラ セッションが保持されないのはなぜですか?

Go アプリケーションのリクエスト間でゴリラ セッションが保持されないのはなぜですか?

Linda Hamilton
リリース: 2024-11-03 05:19:03
オリジナル
777 人が閲覧しました

Why are my Gorilla Sessions not persisting across requests in my Go application?

Go での Gorilla セッションのトラブルシューティング

問題の説明

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

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