首頁 > 後端開發 > Golang > 主體

為什麼我的 Web 應用程式中的請求之間沒有維護 Gorilla 會話變數?

Susan Sarandon
發布: 2024-11-03 02:31:29
原創
165 人瀏覽過

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

使用 Gorilla Session 時未維護會話變數

問題

使用 Gorilla Sessions Web 工具包時,會話變數不會跨請求保留。當伺服器啟動並且使用者存取 localhost:8100/ 時,他們將被導向到 login.html,因為會話值不存在。登入後,會話變數將被存儲,並且使用者將被重定向到 home.html。然而,儘管存在會話變量,打開一個新選項卡並輸入 localhost:8100/ 仍會按預期將使用者引導至 login.html 而不是 home.html。

說明

中出現了幾個問題提供的代碼:

  1. 會話路徑: 會話路徑定義為/登錄會話。這將會話 cookie 的有效性限製到該特定路徑。為了讓會話能夠跨不同路徑(例如localhost:8100/home)工作,您應該將會話路徑設為/.
  2. 語法錯誤: 條件session.Values["email "] == nil 是不正確的。相反,應該使用型別斷言來檢查會話值是否為字串: if val, ok := session.Values["email"].(string); ok { // 檢查值是否為字串}.
  3. 錯誤處理: 不檢查會話保存操作(sessionNew.Save(req, res)) 是否有錯誤。新增錯誤處理以捕獲和處理會話保存期間的任何潛在問題。
  4. SessionHandler 中的會話處理: 應在 中提供靜態檔案之前取得並驗證會話會話處理程序方法。此外,不應在此函數中設定路由器路徑,因為它不在此處的範圍內。相反,在 main() 中設定路由器路徑,並利用單獨的函數在處理靜態檔案請求之前檢查有效會話。

相關程式碼片段(解決問題後):

<code class="go">// Set session options
store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Check for a valid session
    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}</code>
登入後複製

以上是為什麼我的 Web 應用程式中的請求之間沒有維護 Gorilla 會話變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!