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