使用Nodejs连接重新生成会话ID

问题描述:

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

«为了再生会话简单地 调用该方法,一旦完成一个新 SID和Session实例将在req.session被 初始化»

示例代码:

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

在调用上述方法之后,我检查了req.sessionID的值,结果发现值与befor即

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

我有一种感觉,那就是我忽视的东西。

任何帮助表示赞赏。

+1

你在哪里/何时检查'req.sessionID'?也许你正在检查的代码实际上是在重新生成函数运行之前检查的。 – 2011-03-10 22:13:30

+0

我一直在几个地方检查。之前,从内部和之后再生以比较这些值。我使用console.log将req.session.id的值发送到终端。它们之间没有任何区别。 – 2011-03-11 03:21:46

+0

你解决了吗?我有另一个稍微不同的问题:http://*.com/questions/5646905/why-do-i-have-to-create-a-local-reference-to-a-request-session-object-in -nodejs – Lewis 2011-04-13 10:24:58

在所有的可能性你的问题是与此相关的问题:

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

在任何情况下,你所描述的行为是完全一样的问题报告。

只需在回生函数中发送回应即可。由于会话重新生成是异步的,当你返回到客户端时,它仍然会有旧的会话。

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