用于快速会话的 Ephemeral 和 MaxAge
Posted
技术标签:
【中文标题】用于快速会话的 Ephemeral 和 MaxAge【英文标题】:Ephemeral & MaxAge for express-session 【发布时间】:2016-10-03 21:55:02 【问题描述】:我正在尝试在 express-js 应用程序中使用 express-session 包进行会话管理。
我有以下要求:
-
Cookie 在浏览器关闭时在客户端被销毁。
Cookie 在闲置 15 分钟后被销毁。
Cookie 在创建 3 小时后被销毁(无论活动如何)。
(数字只是示例)。
我可以通过将 cookie maxAge 操作到最大值来处理空闲时间。但是,当我阅读 express-session 文档时,我看到:
默认情况下 cookie.maxAge 为 null,表示没有“expires”参数 设置使 cookie 成为浏览器会话 cookie。当用户 关闭浏览器,cookie(和会话)将被删除。
那么,如何创建一个“浏览器会话”cookie,它也有一个 maxAge(用于空闲/绝对超时)?
我也使用node-client-session package 进行了调查,但它不允许使用 ephemeral 和 maxAge。
【问题讨论】:
我不认为有 ephemeral AND expiring cookie 这样的东西,它是一个或另一个(如果一个 cookie 没有设置为maxAge
或expires
属性,它是一个会话/临时 cookie)。见RFC 6265。
所以我想答案是将其设置为临时 cookie,然后自己在服务器端进行所有空闲/超时管理。
是的,恐怕是的。
@robertklep 将其设置为答案,以便我接受。实施起来很简单,实际上可以制作一个不错的包。
随意回答您自己的问题,您的解决方案可能对其他人有帮助(而我的评论仅仅是:评论):D
【参考方案1】:
在找到这个问题并希望同时拥有会话超时和临时会话之后,我已经完成了此操作。这是我在实际应用程序中所做的工作。
我在我的快速会话配置中使用 maxAge,然后在我的客户端/Web 应用程序代码中我挂钩浏览器事件“onbeforeunload”。 onbeforeunload info
它不是万无一失的,并且有一些浏览器怪癖,但是当 onbeforeunload 触发时,我使用它向服务器发送 ajax 请求以“注销”并终止会话。
现在重要的是要问问自己这样做对用户体验 (UX) 和会话体验的预期行为有何影响。如果您想要一个短暂的会话,那么它将针对一个特定的应用程序,只要浏览器打开,您就希望在其中某些东西可用。这也可以通过较短的会话年龄来完成。我们必须考虑实施它的目的是什么。
【讨论】:
以上是关于用于快速会话的 Ephemeral 和 MaxAge的主要内容,如果未能解决你的问题,请参考以下文章
Ephemeral Spark Streaming..以编程方式关闭