为了账号安全,请及时绑定邮箱和手机立即绑定

当 MaxAge 为 0 时,gorilla/sessions 无法保存新会话

当 MaxAge 为 0 时,gorilla/sessions 无法保存新会话

Go
交互式爱情 2023-07-31 14:55:43
我在玩具应用程序中使用 gorilla/sessions,并且我想使用 FilesystemStore,但如果我将MaxAge存储选项设置为 0,它会在保存会话时尝试删除会话,但如果会话是新的,它没有 ID:    sess, err := s.store.Get(r, "session-name")    if err != nil {        log.Printf("error getting session %v", err)        http.Error(w, "session", http.StatusInternalServerError)        return    }    sess.Values["name"] = r.FormValue("name")    if err = sess.Save(r, w); err != nil {        log.Printf("error saving session %v", err)        http.Error(w, "saving", http.StatusInternalServerError)        return    }    http.Redirect(w, r, "/view", http.StatusFound)我得到的错误是:2019/10/15 09:22:03 error saving session remove sessions\session_: The system cannot find the file specified.查看 Gorilla 代码,似乎 Gorilla 代码在确定会话是否有 ID 之前尝试从存储中删除会话。我的问题是 Gorilla 的问题,还是我使用它的方式的问题?MaxAge不设置时一切正常0,但随后我必须自己管理cookie。
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

如果您检查Savemethod,您会看到它尝试删除与 的会话MaxAge <= 0。实际上,您可以通过这种方式标记需要删除的会话。由于您正在使用 来创建会话s.store.Get(r, "session-name"),因此它将使用该存储中的 MaxAge,并且您应该将其设置为大于 0 的值。

设置 MaxAge 的文档说:

可以通过为该会话设置 Options.MaxAge = -1 来删除单个会话。

但在保存中你可以看到:

如果会话的Options.MaxAge <= 0,则会话文件将从存储路径中删除。

因此,将其设置为 0 与将其设置为 -1 或任何其他负值相同。


查看完整回答
反对 回复 2023-07-31
  • 1 回答
  • 0 关注
  • 68 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信