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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-03 02:31:29204ブラウズ

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

ゴリラ セッションの使用中にセッション変数が保持されない

問題

ゴリラ セッション Web ツールキットの使用中、セッション変数はリクエスト間で保持されません。サーバーが起動し、ユーザーが localhost:8100/ にアクセスすると、セッション値が存在しないため、login.html にリダイレクトされます。ログインすると、セッション変数が保存され、ユーザーは home.html にリダイレクトされます。ただし、新しいタブを開いて「localhost:8100/」と入力すると、セッション変数が存在するにもかかわらず、予想どおりにユーザーは home.html ではなく login.html に誘導されます。

説明

いくつかの問題が発生します。提供されたコード:

  1. セッション パス: セッション パスは /loginSession として定義されます。これにより、セッション Cookie の有効性がこの特定のパスに制限されます。セッションが異なるパス (localhost:8100/home など) で動作するには、セッション パスを /.
  2. 構文エラー: 条件 session.Values["email に設定する必要があります。 "] == nil は正しくありません。代わりに、タイプ アサーションを使用して、セッション値が文字列であるかどうかを確認する必要があります。 if val, ok := session.Values["email"].(string); ok { // 値が文字列であるかどうかを確認します }.
  3. エラー処理: セッション保存操作 (sessionNew.Save(req, res)) のエラーはチェックされません。セッション保存中に発生する可能性のある問題をキャプチャして処理するためのエラー処理を追加します。
  4. SessionHandler でのセッション処理: セッションは、静的ファイルをサービスに提供するに取得して検証する必要があります。 SessionHandler メソッド。さらに、ルータ パスはここでは対象外であるため、この関数内で設定しないでください。代わりに、main() でルーターのパスを設定し、静的ファイル要求を処理する前に有効なセッションをチェックする別の関数を利用します。

関連するコード スニペット (問題に対処した後):

<code class="go">// Set session options
store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Check for a valid session
    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}</code>

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

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