首页 >后端开发 >Golang >为什么我的会话变量没有使用 Gorilla Sessions 保留?

为什么我的会话变量没有使用 Gorilla Sessions 保留?

Susan Sarandon
Susan Sarandon原创
2024-11-03 00:22:02574浏览

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