我正在尝试使用用户登录构建一个简单的Web应用程序。
我在这里的另一篇文章中找到了这个功能。
func initSession(r *http.Request) *sessions.Session {
session, _ := store.Get(r, "mBoxStore")
if session.IsNew {
session.Options.Domain = "localhost"
session.Options.MaxAge = 10
session.Options.HttpOnly = false
session.Options.Secure = false
log.Println("Create New Session (cookie)")
} else {
log.Println("Use Old Session (old cookie)")
}
return session
}
Cookie在10 seconds
之后过期,但是当我重新加载页面后1 Minute
它使用旧的(过期的)cookie。
在我的浏览器(Firefox)中,我看到了具有正确过期日期的cookie。
我认为它应该用新cookie创建一个新会话,否则它是错误的?
任何提示?
答案 0 :(得分:4)
您看到Use Old Session (old cookie)
的原因是因为首次创建Cookie时会话选项仅 。每次在之前访问cookie 时,它都会到期(isNew == false
)Options
,并且默认值会覆盖您在创建会话时设置的值。默认MaxAge
为86400 * 30(一个月)。
您可以通过以下方式验证:
这就是为什么我建议在应用程序启动时设置一次会话选项。只有在为了身份验证安全目的而设置更短的cookie生命周期时才会出现偏差,并且在这些情况下使用不同的会话名称(即_csrf_token
,有效期为4小时)。
您使用的代码段并不理想,因为它完全忽略了尝试检索会话时遇到的任何错误。如果基础会话存储中断,和/或用户禁用了cookie,则可能会遇到错误。