使用 Gorilla 會話時未跨請求維護會話變數
使用 Gorilla Sessions 中間件管理會話變數時可能會出現此問題。提供的程式碼片段強調了可能影響會話持久性的幾個因素:
1.會話路徑配置
程式碼將會話路徑設定為「/loginSession」。因此,會話僅在“/loginSession”路徑內有效。為了確保所有路線上的會話可用性,路徑應設定為“/”:
<code class="go">func init() { store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, // 8 hours HttpOnly: true, } }</code>
2。空字串比較
程式碼檢查 session.Values["email"] == nil 以決定該值是否為空字串。但是,將空字串與 nil 進行比較是不正確的。相反,使用型別斷言來檢查空字串:
<code class="go">if val, ok := session.Values["email"].(string); ok { if val == "" { // Do something... } }</code>
3。處理錯誤
保存會話時處理錯誤至關重要:
<code class="go">err := sessionNew.Save(req, res) if err != nil { // Handle the error }</code>
4.會話驗證順序
程式碼在SessionHandler 函數中驗證會話之前提供靜態文件。為了確保正確的會話驗證,應先驗證會話:
<code class="go">func SessionHandler(res http.ResponseWriter, req *http.Request) { session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Validate the session here... // Serve static files if the session is valid... }</code>
以上是為什麼我的會話變數在使用 Gorilla 會話的請求之間不持久?的詳細內容。更多資訊請關注PHP中文網其他相關文章!