重定向后 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 服务器后重定向
页面未使用 express-session 和护照 nodejs 正确重定向