在使用Gorilla Sessions 進行會話處理的幫助請求中,您描述了未跨請求維護會話值的問題.
一個潛在的問題在於您為會話儲存設定的路徑。透過將路徑設為 /loginSession,您可以將會話的有效性限制為該特定路徑。為了確保會話在所有路徑上保持一致,您應該將路徑設為 / :
store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, HttpOnly: true, }
另一點需要考慮的是檢查會話值的方式。您不應使用session.Values["email"] == nil,而應將值鍵入到字串中以正確處理空值:
if val, ok := session.Values["email"].(string); ok { // if val is a string switch val { case "": http.Redirect(res, req, "html/login.html", http.StatusFound) default: http.Redirect(res, req, "html/home.html", http.StatusFound) } } else { // if val is not a string type http.Redirect(res, req, "html/login.html", http.StatusFound) }
保存會話時也應該檢查錯誤:
err := sessionNew.Save(req, res) if err != nil { // handle the error case }
最後,確保在SessionHandler 函數中提供靜態文件之前獲取並驗證會話:
func SessionHandler(res http.ResponseWriter, req *http.Request) { session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } if session.Values["email"] == nil { http.Redirect(res, req, "html/login.html", http.StatusFound) } else { http.Redirect(res, req, "html/home.html", http.StatusFound) } }
透過解決這些問題,您應該能夠確保使用Gorilla Sessions 跨請求正確保留會話變數。
以上是為什麼我的會話變數沒有使用 Gorilla Sessions 保留?的詳細內容。更多資訊請關注PHP中文網其他相關文章!