使用 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 查詢以避免出現問題至關重要潛在的漏洞。
以上是為什麼我的 Gorilla 會話無法跨 Go 應用程式中的請求持久保留?的詳細內容。更多資訊請關注PHP中文網其他相關文章!