Golang Gorilla /会议

时间:2014-02-16 18:27:35

标签: go gorilla

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

任何提示?

1 个答案:

答案 0 :(得分:4)

您看到Use Old Session (old cookie)的原因是因为首次创建Cookie时会话选项仅 。每次在之前访问cookie 时,它都会到期(isNew == falseOptions,并且默认值会覆盖您在创建会话时设置的值。默认MaxAge86400 * 30(一个月)。

您可以通过以下方式验证:

  1. 清除网站的所有Cookie(即localhost)
  2. 在浏览器中启动路线
  3. 检查新创建的Cookie上的失效日期 - 您现在可以看到它+ 10秒
  4. 等了10秒钟。
  5. 刷新页面 - 您的日志应确认它是新的Cookie。
  6. 现在在Cookie过期前(即在10秒内)刷新页面
  7. 您将看到到期时间已到期+ 1个月(默认值)。
  8. 这就是为什么我建议在应用程序启动时设置一次会话选项。只有在为了身份验证安全目的而设置更短的cookie生命周期时才会出现偏差,并且在这些情况下使用不同的会话名称(即_csrf_token,有效期为4小时)。

    您使用的代码段并不理想,因为它完全忽略了尝试检索会话时遇到的任何错误。如果基础会话存储中断,和/或用户禁用了cookie,则可能会遇到错误。