Nodejs req.sessionID 在重定向后偶尔会发生变化

use*_*393 5 sessionid session-cookies node.js express

我使用 nodejs、express 和 connect-memcaced 来处理我的会话。我制作了一个每次都能完美执行的登录脚本,设置会话数据并将用户标记为已登录,然后将他重定向回他登录的页面。有时(并非总是)发生的情况是,在他被重定向并且页面加载之后,cookie 的 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();
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

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

小智 0

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