我的Express应用程序中有一个受限制的区域“ / dashboard”。我使用一个非常小的函数来限制访问:
app.get('/dashboard', loadUser, function(req, res){ res.render('dashboard', { username: req.session.username }); }); function loadUser(req, res, next){ if (req.session.auth) { next(); } else { res.redirect('/login'); } };
问题是当我通过调用注销用户时…
app.get('/logout', function(req, res){ if (req.session) { req.session.auth = null; res.clearCookie('auth'); req.session.destroy(function() {}); } res.redirect('/login'); });
…会话被终止,但是 当我在浏览器中单击“后退”按钮时,我从浏览器的缓存中获取了受限制的页面。 这意味着’/ dashboard’上没有GET,也没有用户登录验证。
我尝试在meta(玉模板)中使用no-cache,但仍然无法正常工作。
meta(http-equiv='Cache-Control', content='no-store, no-cache, must-revalidate') meta(http-equiv='Pragma', content='no-cache') meta(http-equiv='Expires', content='-1')
任何人?
并采用了该node.js / express问题的答案。您只需要更改以下行
res.header('Cache-Control', 'no-cache');
至
res.header('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0');
现在,每次我使用浏览器的后退按钮时,页面都会重新加载而不被缓存。
更新Express v4.x
// caching disabled for every route server.use(function(req, res, next) { res.set('Cache-Control', 'no-cache, private, no-store, must-revalidate, max-stale=0, post-check=0, pre-check=0'); next(); }); // otherwise put the res.set() call into the route-handler you want