gorilla/sessions 当 MaxAge 为 0 时无法保存新会话
gorilla/sessions fails to save new session when MaxAge is 0
我在玩具应用程序中使用 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。
如果您选中 Save
method,您会看到它试图删除与 MaxAge <= 0
的会话。您实际上标记了需要以这种方式删除的会话。
由于您正在使用 s.store.Get(r, "session-name")
创建会话,它将使用该商店的 MaxAge,您应该将其设置为大于 0 的某个值。
设置 MaxAge 的文档说:
Individual sessions can be deleted by setting Options.MaxAge
= -1 for that session.
但是在保存中你可以看到:
If the Options.MaxAge of the session is <= 0 then the session file
will be deleted from the store path.
因此,将其设置为 0 与将其设置为 -1 或任何其他负值相同。
我在玩具应用程序中使用 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。
如果您选中 Save
method,您会看到它试图删除与 MaxAge <= 0
的会话。您实际上标记了需要以这种方式删除的会话。
由于您正在使用 s.store.Get(r, "session-name")
创建会话,它将使用该商店的 MaxAge,您应该将其设置为大于 0 的某个值。
设置 MaxAge 的文档说:
Individual sessions can be deleted by setting Options.MaxAge = -1 for that session.
但是在保存中你可以看到:
If the Options.MaxAge of the session is <= 0 then the session file will be deleted from the store path.
因此,将其设置为 0 与将其设置为 -1 或任何其他负值相同。