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

时间:2018-03-07 04:31:44

标签: node.js express session express-session

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

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

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

实际行为是什么:

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 个答案:

答案 0 :(得分:1)

目前的版本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);
});