根据用户选择在持久和非持久会话之间切换

时间:2019-07-23 14:05:54

标签: node.js express session

我正在尝试使用express-session作为会话中间件和connect-mongo作为持久存储为Web应用程序创建登录功能。我能够使用mongo存储实现持久性会话,在此之前,express-session支持内存中的会话,直到用户关闭浏览器为止。

我提供的功能是,如果用户在登录时选中了“保持登录状态”复选框,将创建一个持续n天的会话,但默认情况下,会话应在关闭该会话后过期浏览器。现在,我已经使用connect-mongo实现了持久存储,因此我已经失去了清除浏览器退出会话的功能。

如何针对我的功能在两种会话方式之间进行切换。

  1. 是否可以在connect-mongo中清除浏览器退出时的会话?如果是这样,我该如何处理浏览器事件。
  2. 基于用户选择实现会话并仅在用户选择保持登录状态时才实现持久存储是否可行?

请提出一个更好的选择,或者一个我尚未看到的选择。

1 个答案:

答案 0 :(得分:0)

我相信您会混淆两件事。

express-session使用不同的存储来保留服务器端的会话。它可以是内存存储,一旦节点进程退出(不是在关闭浏览器时)便被清除,也可以是磁盘/数据库中的持久存储。

如果您仔细阅读connect-mongo自述文件,您会注意到它会根据cookie的到期日期从数据库中清除会话,或者如果未设置,它将使用您可以提供的ttl选项(请参阅{{3} }。

但这是在服务器端,它不会影响浏览器尊重的cookie的到期日期。

会话cookie是未设置有效期的cookie,即,当关闭时,浏览器将删除该cookie。最初,您可以使用传递给maxAge的{​​{1}}方法的here选项来设置Cookie的session。您可以将该值用作用户的会话过期日期,该用户选择“保持登录状态”复选框。

对于未选择“保持登录状态”的用户,您可以通过具有用户登录逻辑的端点内的express-session来访问它来动态调整Cookie的过期时间:

req.session.cookie

此信息也在req.session.cookie.expires = false 文档cookie.maxAge中。