【问题标题】:Nodejs req.sessionID occasionally changes after redirect重定向后 Nodejs req.sessionID 偶尔会更改
【发布时间】:2012-09-26 09:14:53
【问题描述】:

我正在使用 nodejs、express 和 connect-memcaced 来处理我的会话。我制作了一个每次都能完美执行的登录脚本,设置会话数据并将用户标记为已登录,然后将他重定向回他登录的页面。有时(并非总是)发生的情况是,在他被重定向并且页面加载cookies sessionID 更改之后,用户当然不再登录。我找不到发生这种情况的原因以及为什么不是每次都发生。

登录功能的代码片段:

DB.getOne('User',{filters:{'primary':{email:req.body.email}}}, function(err,data){
  if(data[0] && data[0].active == 1){
    var encodedPass = self.encodePass(req.body.pass,req.body.email);
    if(encodedPass == data[0].pass){
      req.session.pr.user = data[0];
      req.session.pr.user.status = true; 
      res.writeHead(302, {
        'Location': goTo 
      });
      res.end();
    }
  }
});

直接查看 memcached,我可以看到它完美执行,并且数据始终保存在原始 sessionID 下的 memcached 中。由于某种原因,重定向必须更改 sessionID

【问题讨论】:

  • 会话 cookie 是否使用与您的重定向 URL 不同的默认路径保存?
  • 您能否发布您在 Express 中使用的中间件的顺序?

标签: node.js express session-cookies sessionid


【解决方案1】:

当我没有注意到我已重新启动开发服务器时,我经常发现这种情况发生在我身上。请记住,会话 cookie 存储在内存中,因此当服务器重新启动时,所有会话都会被遗忘,并且会自动为用户分配一个新会话。

【讨论】:

  • OP 正在使用connect-memcached 存储会话,它应该能够在节点进程重新启动后继续存在。
  • 没错 - 我有点太快了。但是,如果他正在重新启动 memcached,或者会话由于空间/时间而超出 memcached,则答案仍然适用
猜你喜欢
  • 1970-01-01
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多