当前位置: 首页 > 面试题库 >

Node.js和Express会话处理-后退按钮问题

微生毅
2023-03-14
问题内容

我的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


 类似资料:
  • 问题内容: 我在会话方面遇到问题,有时我 刚刚 设置的会话变量在下一页请求中未定义。为了正确设置变量,我通常必须再次执行该流程。 我可以确认我没有尝试将会话变量设置为undefined。他们有合法的价值。 在我的应用中,用户从/ twitter / connect /移至/ twitter / callback /。前者从Twitter检索一些oauth数据,后者将用户登录到Twitter。 /

  • 问题内容: 我当前正在使用一个Web应用程序,每次都调用此Web应用程序,请删除所有当前的Express会话,因此我需要一种方法来保留所有这些会话。我试图用connect- mongodb和connect- redis保留所有这些会话,但是都无效,nodemon总是说req.session是未定义的。我不知道该怎么做才能保留所有会话。 我需要一种方法来保留所有会话,执行时不要丢失它们,并为其提供教

  • 问题内容: 我正在使用pushState为网站上的Ajax内容创建有意义的URL。我想在用户单击前进或后退按钮时刷新Ajax内容。但是我遇到了问题,因为Chrome(正确)在“历史记录遍历”(前进/后退按钮)和“结束”(页面加载)上都暗示了onpopstate。我想创建一个区分页面加载和历史遍历的onpopstate处理程序,因为如果已经成功加载Ajax内容,我就不希望刷新它。有人可以帮助我区分两

  • 在我的应用程序中,我有一个EditText。当我聚焦这个元素时,会出现光标和键盘。当我知道按下后退按钮时,键盘消失,但元素保持聚焦,闪烁的光标仍然可见。 我试图用我在其他帖子上找到的代码来管理它,但它不起作用,我只是不明白这个事件。

  • 问题内容: 当用户登录时,将存储会话信息。当用户注销时,会话信息将被删除。但是当我点击浏览器的后退按钮时,会显示用户信息。由于会话已消失,但我们无法确定是否执行了用户登录操作。我该如何解决这个问题? 问题答案: 我用这种方法。首先创建一个实现Filter的类并重写doFilter()方法。doFilter()的代码是: 之后在web.xml中使用过滤器。这个过滤器就是这个。