使用Nodejs Connect重新生成会话ID

时间:2011-03-10 20:15:25

标签: javascript node.js connect sessionid

我正在使用Node.js服务器,我正在使用Connect框架进行开发。我试图在给定间隔后重新生成SID以避免会话固定。有一种名为 req.session.regenerate 的方法,根据文档,它应该做到这一点。

  

«简单地重新生成会话   一旦完成,就调用该方法   新的SID和Session实例将是   在req.session初始化»

示例代码:

req.session.regenerate(function(err){
    // will have a new session here
 });

调用上面的方法后,我检查req.sessionID的值,发现该值与之前相同。

如果我尝试从req.session.regenerate中获取sessionID并将其写入终端,我会得到一个新的SID,这更令人费解~IE为什么你想要只在回调范围内生成SID ?如果我将值赋给全局变量,则它的值是未定义的。

我有一种感觉,我忽视了一些非常明显的事情。

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您的问题很可能与此问题有关:

https://github.com/senchalabs/connect/pull/263

在任何情况下,您描述的行为与问题中报告的完全相同。

答案 1 :(得分:1)

只需在重新生成函数的回调中发回响应。由于会话重新生成为异步,因此当您返回到客户端时,它仍将具有较旧的会话。

req.session.regenerate(function(err) {
                                req.session.myid = "myvalue";
                                res.simpleJSON(200, status);
                        });