【问题标题】:Golang Gorilla/sessionGolang 大猩猩/会话
【发布时间】:2014-03-15 22:46:00
【问题描述】:

我正在尝试使用用户登录构建一个简单的 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 创建一个新会话,否则它是错误的?

有什么建议吗?

【问题讨论】:

  • 您最好在应用程序启动时为每个商店设置选项。然后只需在您的处理程序中使用session.Get(并检查错误)。 sessions 文档很好地涵盖了它:gorillatoolkit.org/pkg/sessions
  • 感谢您的回答。问题不在于代码……它对我有用……我可以从会话中保存和读取数据……但它忽略了 cookie 中的过期日期。它总是使用“旧”Cookie。

标签: go gorilla


【解决方案1】:

您看到Use Old Session (old cookie) 的原因是,会话选项在首次创建 cookie 时设置。每次您访问 cookie before 时,它都会过期 (isNew == false) Options 不会被设置,默认值会覆盖您在创建会话时设置的那些。默认MaxAge86400 * 30(一个月)。

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

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

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

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

【讨论】:

  • 感谢您的帮助 :) 现在我看到了问题所在。我没有在新cookie中看到过期“月份”,我只看创建时间。
  • 如果不清楚(起初我并不清楚当答案说我建议在应用启动时设置一次会话选项),商店有一个.Options,就像session.Options。因此:var sessionStore = sessions.NewCookieStore(...) 然后sessionStore.Options = &sessions.Options{ MaxAge: ... } 等等
  • 注意:NewCookieStore(...) 调用 sessionStore.MaxAge(),默认值为 86400 * 30(1 个月)。这个函数有一个 for 循环,从服务器的角度设置存储中所有底层 cookie 的最大年龄。将结构字段.Options{MaxAge: ... } 设置为上述注释将设置未来发送到浏览器的cookie 的到期日期,但该到期日期不会反映在服务器的cookie 记录中。为了避免浏览器/服务器到期日期之间的差异,请改用sessionStore.MaxAge()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-24
  • 2015-03-30
  • 1970-01-01
  • 2018-06-08
  • 2019-12-13
  • 1970-01-01
相关资源
最近更新 更多