我在玩具应用程序中使用 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个赞
如果您检查Save
method,您会看到它尝试删除与 的会话MaxAge <= 0
。实际上,您可以通过这种方式标记需要删除的会话。由于您正在使用 来创建会话s.store.Get(r, "session-name")
,因此它将使用该存储中的 MaxAge,并且您应该将其设置为大于 0 的值。
设置 MaxAge 的文档说:
可以通过为该会话设置 Options.MaxAge = -1 来删除单个会话。
但在保存中你可以看到:
如果会话的Options.MaxAge <= 0,则会话文件将从存储路径中删除。
因此,将其设置为 0 与将其设置为 -1 或任何其他负值相同。
- 1 回答
- 0 关注
- 112 浏览
添加回答
举报
0/150
提交
取消