首頁 >後端開發 >Golang >為什麼我的 Gorilla 會話無法跨 Go 應用程式中的請求持久保留?

為什麼我的 Gorilla 會話無法跨 Go 應用程式中的請求持久保留?

Linda Hamilton
Linda Hamilton原創
2024-11-03 05:19:03786瀏覽

Why are my Gorilla Sessions not persisting across requests in my Go application?

Go 中的 Gorilla 會話故障排除

問題描述

使用 Gorilla 會話時,不會跨請求維護會話變數。儘管成功登入並儲存了會話變量,應用程式仍將使用者引導至登入頁面。

解決方案

1.正確的路徑配置:

會話儲存無法從其他路徑訪問,因為路徑設定為「/loginSession」。將其更改為“/”以使會話可以在整個應用程式中存取。

2.會話值驗證:

不要將 session.Values["email"] 與 nil 比較。相反,將值斷言為字串,並使用 val == "".

3 檢查它是否為空。錯誤處理:

確保使用 err := sessionNew.Save(req, res) 儲存會話時處理錯誤。

4. SessionHandler 中的會話驗證:

在 SessionHandler 中提供靜態檔案之前驗證會話。如果電子郵件會話值不存在,則重新導向使用者登入。

程式碼修正:

初始化函數:

<code class="go">func init() {
    store.Options = &sessions.Options{
        Domain:   "localhost",
        Path:     "/",
        MaxAge:   3600 * 8, // 8 hours
        HttpOnly: true,
    }
}</code>

SessionHandler:

<code class="go">func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    if session.Values["email"] == "" {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}</code>
安全建議:

此外,使用bcrypt 進行密碼雜湊並參數化SQL 查詢以避免出現問題至關重要潛在的漏洞。

以上是為什麼我的 Gorilla 會話無法跨 Go 應用程式中的請求持久保留?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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