我使用node.js
和express.js
来实现我的网络服务器。
我使用express-session
模块(https://github.com/expressjs/session)来处理网络会话,并使用connect-redis
(https://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;
});
答案 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);
});