7

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

« 要重新生成会话只需调用该方法,一旦完成一个新的 SID 和会话实例将在 req.session 初始化 »

示例代码:

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

调用上述方法后,查看req.sessionID的值,发现和之前的值一样。

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

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

任何帮助表示赞赏。

4

2 回答 2

1

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

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

无论如何,您描述的行为与问题中报告的行为完全相同。

于 2011-04-23T01:14:39.333 回答
1

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

req.session.regenerate(function(err) {
                                req.session.myid = "myvalue";
                                res.simpleJSON(200, status);
                        });
于 2012-02-16T05:32:50.443 回答