我正在尝试构建一个带有用户登录的简单 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
}
Run Code Online (Sandbox Code Playgroud)
cookie 在 后过期10 seconds,但是当我在例如之后重新加载页面时,1 Minute
它使用旧的(过期的)cookie。
在我的浏览器 (Firefox) 中,我看到具有正确过期日期的 cookie。
我认为它应该使用新的 cookie 创建一个新的会话,或者这是错误的?
有小费吗 ?
您看到的原因Use Old Session (old cookie)是会话选项仅在首次创建 cookie 时设置。每次您在 cookie过期 ( )之前访问 cookie时,都不会进行设置,并且默认值将覆盖您在创建会话时设置的值。默认值为86400 * 30(一个月)。isNew == falseOptionsMaxAge
您可以通过以下方式验证这一点:
这就是为什么我建议在应用程序启动时设置一次会话选项。仅当您出于身份验证安全目的而设置较短的 cookie 生命周期时才会偏离,并且在这些情况下使用不同的会话名称(即_csrf_token过期时间为 4 小时)。
您使用的代码片段也不是很理想,因为它完全忽略了尝试检索会话时遇到的任何错误。如果您的底层会话存储已损坏,和/或用户禁用了 cookie,您可能会遇到错误。
| 归档时间: |
|
| 查看次数: |
4929 次 |
| 最近记录: |