我是一名初学者,正在使用 NodeJS Express 开发一个小型用户管理项目。我进行了会话处理并在应用程序级别使用了 nocache 中间件。当用户登录时,会创建一个会话,当用户注销时,会话将被销毁,但是当我在用户注销后按浏览器的上一页按钮时,它仍然会返回到会话所在的上一页被毁了。为什么会发生这种情况以及如何解决这个问题?
我在应用程序级别尝试使用 nocache 中间件来防止缓存。当用户登录时,我创建了一个新会话(如 req.session.user = userData),并在用户注销时销毁它。
req.session.destroy(function(err) {
if(err) {
console.log(err);
res.send(err);
}
else {
res.redirect("/login?logout=Logout Successfully...");
}
});
使用浏览器的“后退”按钮返回到之前访问过的页面将从“后退/前进缓存”中获取该页面。与在不同选项卡上执行其他操作后切换回之前查看的浏览器选项卡相比,这是最好的。在这两种情况下,浏览器不会向服务器发出请求,这就是它没有注意到会话缺失的原因。 在早期,给页面
Cache-Control: no-store
阻止其进入后退/前进缓存,但Google Chrome最近
改变了这种行为。 如果您使用
pageshow
事件(如
此处所述),则可以强制导航到的页面仅在活动会话中显示数据。如果您还想覆盖选项卡开关的情况,也可以使用
visibilitychange
事件。