Gorilla セッションの実装では、セッション変数がリクエスト間で維持されない。ログインしてセッション変数を設定した後、新しいタブでセッションが維持されるはずですが、代わりにユーザーはログイン ページにリダイレクトされます。
<code class="go">sessionNew.Save(req, res)</code>
このコードが見つからないエラーsessionNew.Save() の処理。保存プロセスが失敗した場合、エラーは無視され、予期しない動作が発生します。次のように更新する必要があります:
<code class="go">err := sessionNew.Save(req, res) if err != nil { // Handle the error }</code>
セッション パスは「/loginSession」に設定され、セッションのスコープがその特定のパスのみに制限されます。他のルートを訪問するユーザーはセッションにアクセスできないため、混乱が生じる可能性があります。すべてのルートでセッションを利用できるようにするには、パスを「/」に設定する必要があります。
SessionHandler では、静的ファイルを提供した後にセッション チェックが実行されます。セッションが検証される前に静的ファイルが提供されるため、問題が発生する可能性があります。セッション チェックは、コンテンツを提供する前に実行する必要があります。
<code class="go">package main import ( "crypto/md5" "encoding/hex" "fmt" "github.com/gocql/gocql" "github.com/gorilla/mux" "github.com/gorilla/sessions" "net/http" "time" ) var store = sessions.NewCookieStore([]byte("something-very-secret")) var router = mux.NewRouter() func init() { store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, // 8 hours HttpOnly: true, } } func main() { //session handling router.HandleFunc("/", sessionHandler) router.HandleFunc("/signIn", signInHandler) router.HandleFunc("/signUp", signUpHandler) router.HandleFunc("/logOut", logOutHandler) http.Handle("/", router) http.ListenAndServe(":8100", nil) } //handler for signIn func signInHandler(res http.ResponseWriter, req *http.Request) { // Get the session session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Set session values session.Values["email"] = req.FormValue("email") session.Values["name"] = req.FormValue("password") // Save the session err = session.Save(req, res) if err != nil { // Handle the error } } //handler for signUp func signUpHandler(res http.ResponseWriter, req *http.Request) { // ... } //handler for logOut func logOutHandler(res http.ResponseWriter, req *http.Request) { // Get the session session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Save the session (with updated values) err = session.Save(req, res) if err != nil { // Handle the error } } //handler for Session func sessionHandler(res http.ResponseWriter, req *http.Request) { // Get the session session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Check if the session is valid 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>
以上がGolang セッション変数が Gorilla セッションに保存されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。