使用 Nodejs Connect 重新生成会话 ID

Posted

技术标签:

【中文标题】使用 Nodejs Connect 重新生成会话 ID【英文标题】:Regenerate session IDs with Nodejs Connect 【发布时间】:2011-07-13 00:45:02 【问题描述】:

我正在使用 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 仅在回调范围内生成?如果我将值分配给全局变量,它的值是未定义的。

我觉得我忽略了一些非常明显的事情。

感谢任何帮助。

【问题讨论】:

您在哪里/何时查看req.sessionID?也许您正在检查的代码实际上是在 regenerate 函数运行之前进行检查。 我已经检查了几个地方。重新生成之前、内部和之后以比较值。我使用 console.log 将 req.session.id 的值发送到终端。它们之间没有区别。 你解决了吗?我遇到了另一个稍微不同的问题:***.com/questions/5646905/… 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于使用 Nodejs Connect 重新生成会话 ID的主要内容,如果未能解决你的问题,请参考以下文章

使用nodejs中的用户对象登录后将重新生成的会话ID发送回用户代理

PHP、nodeJS 和会话

不同客户端Nodejs的会话ID相同

使用 PassportJS 和 Connect for NodeJS 来验证 Facebook 用户

nodejs 连接mongoose 报错 connect ECONNREFUSED怎么解决

通过 WinRM 重新使用 PowerShell 会话