重定向后 Nodejs req.sessionID 偶尔会更改

Posted

技术标签:

【中文标题】重定向后 Nodejs req.sessionID 偶尔会更改【英文标题】:Nodejs req.sessionID occasionally changes after redirect 【发布时间】: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 中使用的中间件的顺序? 【参考方案1】:

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

【讨论】:

OP 正在使用connect-memcached 存储会话,它应该能够在节点进程重新启动后继续存在。 没错 - 我有点太快了。但是,如果他正在重新启动 memcached,或者会话由于空间/时间而超出 memcached,则答案仍然适用

以上是关于重定向后 Nodejs req.sessionID 偶尔会更改的主要内容,如果未能解决你的问题,请参考以下文章

302 在 CORS 预检请求到 nodejs 服务器后重定向

Nodejs Express 重定向不起作用

页面未使用 express-session 和护照 nodejs 正确重定向

通过Vuejs调用时如何使Nodejs重定向工作

nginx过滤资源文件(js/css/image)重定向问题

提交表单后Node JS重定向