首頁 >後端開發 >Golang >為什麼我的會話變數在使用 Gorilla 會話的請求之間不持久?

為什麼我的會話變數在使用 Gorilla 會話的請求之間不持久?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 20:49:031129瀏覽

Why Are My Session Variables Not Persistent Across Requests Using Gorilla Sessions?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn