【问题标题】:Gorilla Sessions - How to Automatically Update Cookie Expiration on Request?Gorilla Sessions - 如何根据请求自动更新 Cookie 过期时间?
【发布时间】:2015-04-21 09:57:21
【问题描述】:

我知道许多其他语言和 Web 框架会在每次通过后端访问会话(或类似的操作)时自动将 cookie 的过期时间更新为会话超时。我不相信 Gorilla 提供了这个实用程序。

我正在考虑编写一些请求中间件,如果它检测到有效会话,将延长 cookie 的生命周期,但我想知道是否有更好的方法来做到这一点。

更新 cookie 过期的最佳做法是什么,尤其是与 Gorilla/Go 相关时?

【问题讨论】:

    标签: session cookies go session-timeout gorilla


    【解决方案1】:

    您可以简单地实现自己的Store,它建立在CookieStore 等现有会话存储之上,但使用一些规则在Save 调用期间自动更新过期时间。

    【讨论】:

      【解决方案2】:

      如果设置了 cookie 的 Max-Age 参数,则不需要同时设置 Expiry,除非需要支持不支持 Max-Age 的旧浏览器。

      仅使用 Max-Age 意味着您不需要在每次请求时都更新它。

      设置规格:https://www.rfc-editor.org/rfc/rfc6265#section-4.1.2

      【讨论】:

      • 对,但是 max-age 是相对于 cookie 创建的。所以我想在这种情况下我需要销毁旧会话,并创建一个新的、相同的会话?
      • 公平点。只需一个新的 Set-Cookie 标头即可,如果您使用相同的名称、路径、域等,则更新现有的标头。但这会让您回到原来的问题。
      • 是的,我刚刚在登录时为我的会话设置了一个“已创建”的 Unix 时间戳。然后,我编写了设置session.Options.MaxAge = time.Now().Unix() - session.Values["created"].(int64) + sessionStore.SessionLengthSeconds 的请求中间件。我还必须确保在生成任何响应之前该中间件会运行,因为保存会话会设置“Set-Cookie”标头。
      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 1970-01-01
      • 1970-01-01
      • 2013-12-23
      • 2021-12-11
      • 2014-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多