node.js - express-session:如何更新 ssid 但保留数据?

标签 node.js express session express-session

我使用 node.jsexpress.js 来实现我的 Web 服务器。

我使用 express-session 模块 ( https://github.com/expressjs/session ) 来处理 Web session ,并使用 connect-redis ( https://github.com/tj/connect-redis ) 来存储 session 。我相信这与商店的类型无关,但如果你问的话我告诉你。

用户登录并更改一些敏感数据后,例如。更改密码,我想更新 ssid。所以我使用req.session.regenerate()。但是,在函数调用之后,所有其他 session 数据都丢失了。更新ssid后如何保留 session 数据?

实际行为:

req.session.userId = 100;

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

    console.log(req.session.userId); // undefined
});

我想要什么:

req.session.userId = 100;

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

    console.log(req.session.userId); // 100
});

以下是我所做的。它有效,但这是正确的方法吗?

var sessionData = req.session;        

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

    req.session = sessionData;
});

最佳答案

在当前版本 1.15.6 中无法完成此操作。该功能将在未来添加。

https://github.com/expressjs/session/issues/425

这是一个很好的解决方法。也许更好地使用Object.assign:

var sessionData = req.session;

req.session.regenerate((err) => {
    Object.assign(req.session, sessionData);
});

关于node.js - express-session:如何更新 ssid 但保留数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49144166/

相关文章:

javascript - 为什么 https.Agent 在通过 node-http-proxy 代理时抛出解析错误?

javascript - 将 POST 与 React Fetch 一起使用会返回空对象吗?

javascript - 使用 Cheerio 对象制作 For 循环的正确方法是什么?

javascript - Mongoose/Express/Nodejs 试图将变量从服务器传递到 html

node.js - 纯套接字逻辑

node.js - 使用路径模块更改路径分隔符

javascript - 当我选择具有该 ID 值的选项时,如何显示包含与该 ID 相关的数据的表格?

.net - 来自不同客户端的调用之间未清除 WCF AuthorizationContext。 (原为 : When does a WCF service session actually end? )

session - GRAILS:如何通过Spring Security核心插件获取当前登录用户的数量?

java - 使用编码算法在 RAM 中存储 4x4 2D 矩阵,以实现最小的 RAM 空间使用