gpt4 book ai didi

Golang gorilla /session

转载 作者:IT王子 更新时间:2023-10-29 00:44:19 25 4
gpt4 key购买 nike

我正在尝试使用用户登录构建一个简单的 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 秒 后过期,但是当我重新加载页面时,例如1 分钟它使用旧的(过期的)cookie。

在我的浏览器 (Firefox) 中,我看到了具有正确过期日期的 cookie。

我认为它应该使用新的 cookie 创建一个新的 session 或者它是错误的?

有什么建议吗?

最佳答案

您看到 Use Old Session (old cookie) 的原因是 session 选项在首次创建 cookie 时设置。每次您在 之前访问 cookie 时,它​​都会过期 (isNew == false) Options 未设置,默认值将覆盖您设置的关于 session 的创建。默认的 MaxAge86400 * 30 (一个月)。

您可以通过以下方式验证这一点:

  1. 清除站点的所有 cookie(即本地主机)
  2. 在浏览器中调出路线
  3. 检查新创建的 cookie 上的到期日期 - 您会看到现在是 + 10 秒
  4. 等待 10 秒。
  5. 刷新页面 - 您的日志应确认这是一个新的 cookie。
  6. 现在在 cookie 过期前(即 10 秒内)刷新页面
  7. 您会看到到期时间为现在 + 1 个月(默认值)。

这就是为什么我建议在应用程序启动时设置一次 session 选项。仅当您出于身份验证安全目的设置较短的 cookie 生存期时才会偏离,并且在这些情况下使用不同的 session 名称(即 _csrf_token,有效期为 4 小时)。

您使用的代码片段也不是很理想,因为它完全忽略了在尝试检索 session 时遇到的任何错误。如果您的底层 session 存储损坏,和/或用户禁用了 cookie,您可能会遇到错误。

关于Golang gorilla /session,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21815520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com