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

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

Mary-Kate Olsen
發布: 2024-11-03 20:49:03
原創
1010 人瀏覽過

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板