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