我正在尝试使用express-session作为会话中间件和connect-mongo作为持久存储为Web应用程序创建登录功能。我能够使用mongo存储实现持久性会话,在此之前,express-session支持内存中的会话,直到用户关闭浏览器为止。
我提供的功能是,如果用户在登录时选中了“保持登录状态”复选框,将创建一个持续n天的会话,但默认情况下,会话应在关闭该会话后过期浏览器。现在,我已经使用connect-mongo实现了持久存储,因此我已经失去了清除浏览器退出会话的功能。
如何针对我的功能在两种会话方式之间进行切换。
请提出一个更好的选择,或者一个我尚未看到的选择。
答案 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
中。