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

当MaxAge为0时,gorilla/sessions无法保存新会话,go,gorilla,Go,Gorilla,我在玩具应用程序中使用gorilla/sessions,我想使用FilesystemStore,但如果我将存储的MaxAge选项设置为0,它会在保存会话时尝试删除会话,但如果会话是新的,它没有ID: sess,err:=s.store.Get(r,“会话名称”) 如果出错!=零{ log.Printf(“获取会话%v时出错”,错误) 错误(w,“会话”,http.StatusInternalServerError) 返回 } sess.Values[“name”]=r.FormValue(“na

我在玩具应用程序中使用gorilla/sessions,我想使用FilesystemStore,但如果我将存储的
MaxAge
选项设置为0,它会在保存会话时尝试删除会话,但如果会话是新的,它没有ID:

sess,err:=s.store.Get(r,“会话名称”)
如果出错!=零{
log.Printf(“获取会话%v时出错”,错误)
错误(w,“会话”,http.StatusInternalServerError)
返回
}
sess.Values[“name”]=r.FormValue(“name”)
如果err=sess.Save(r,w);呃!=零{
log.Printf(“保存会话%v时出错”,错误)
http.Error(w,“保存”,http.StatusInternalServerError)
返回
}
重定向(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之前从存储中删除会话

我的问题是与大猩猩有关,还是与我如何使用它有关


如果不将
MaxAge
设置为
0
,一切正常,但我必须自己管理cookies。

如果您检查,您将看到它尝试使用
MaxAge删除会话。听起来您使用的文件不存在。但是您没有包含代码的这一部分。为什么要将“最大年龄”设置为0?因为它试图删除尚未保存的会话。MaxAge不是,它只删除右侧-这是我看到的-我将存储的
MaxAge
设置为
0
,因为我希望会话cookie在用户关闭浏览器时过期。但是,将其设置为0会尝试在文件具有ID之前删除该文件。如果会话过期(例如,15分钟)和设置cookie使其没有过期(以便在浏览器关闭时将其删除)有单独的选项,则可能会尝试使用CookieStore而不是FilesystemStore(MaxAge=0).将此标记为答案-根据API,它完全正确。剩下的唯一问题是API使用cookie来发送会话ID,但我无法独立于会话过期设置cookie过期-这是API的错误。(当然,文档确实警告文件系统存储未完全烘焙)。