首頁 >後端開發 >Golang >為什麼我的會話變數沒有使用 Gorilla Sessions 保留?

為什麼我的會話變數沒有使用 Gorilla Sessions 保留?

Susan Sarandon
Susan Sarandon原創
2024-11-03 00:22:02567瀏覽

Why are my session variables not being preserved using Gorilla Sessions?

使用Gorilla Sessions 未保留會話變數

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

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