如何在节点 js 中清除浏览器 cookie 时清除 req.session?

Posted

技术标签:

【中文标题】如何在节点 js 中清除浏览器 cookie 时清除 req.session?【英文标题】:How to clear req.session on clearing browser cookies in node js? 【发布时间】:2017-08-04 14:21:29 【问题描述】:

我使用"express": "~4.14.0"express-session 来保存用户名。用户登录后,我会将用户名保存在req.session.authorizedUser = username 中,以显示在应用程序标题中。

当浏览器历史被清除或浏览器关闭时,我想清除会话。

请建议我在执行这两个操作时是否有任何方法可以清除会话。我试过为会话cookie设置maxAge选项,如下图,但反映不好:

app.use(session(
    secret: "key test",
    resave: false,
    saveUninitialized: true,
    cookie:  secure: !true, path: '/', httpOnly: true, maxAge: null
));

【问题讨论】:

【参考方案1】:

由于浏览器在删除 cookie 时(无论出于何种原因)都不会通知服务器,因此无法仅在服务器端告诉服务器会话是否应该仍然有效。

这就是为什么大多数会话存储都有过期机制,会在特定时间后删除空闲会话(通常与maxAge 相关联)。

例如,connect-mongo 会话存储使用 MongoDB 的 TTL 功能从数据库中删除过期会话。

不过,除了占用一点存储空间之外,空闲会话也不是问题。当用户再次登录时,将为他们创建一个新会话,而旧会话最终将过期并从存储中删除。

【讨论】:

您能告诉我我们如何在客户端维护会话吗? @DhyaS 你到底是什么意思?您想在客户端知道会话何时过期或什么? 是的.. 没错。但是 JS sessionStorage 在节点 JS 中是未定义的 @DhyaS 最终,是服务器确定会话何时到期。客户端通常不知道它是否有有效的会话。确保会话处于活动状态且有效的唯一方法是定期查询服务器。

以上是关于如何在节点 js 中清除浏览器 cookie 时清除 req.session?的主要内容,如果未能解决你的问题,请参考以下文章

js 如何清除setinterval

js中如何设置cookie的保存时间呢?

在浏览器关闭时清除 cookie

chrome如何添加js插件

[转]如何清空Chrome缓存和Cookie

从节点 js 服务器文件向浏览器添加 cookie