「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Web アプリケーションのリクエスト間でゴリラ セッション変数が維持されないのはなぜですか?

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

2024 年 11 月 12 日に公開
ブラウズ:383

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

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

// 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)
    }
}
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3