express-session:如何更新 ssid 但保留数据?
express-session: How to renew ssid but preserve data?
我使用 node.js
和 express.js
来实现我的网络服务器。
我将 express-session
模块 (https://github.com/expressjs/session) to handle web sessions and connect-redis
(https://github.com/tj/connect-redis) 用于会话存储。我相信这与商店的类型无关,但如果你问我告诉你。
用户登录后更改了一些敏感数据,例如。更改密码,我想更新ssid。所以我使用 req.session.regenerate()
。但是,在函数调用之后,所有其他会话数据都丢失了。更新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.js
来实现我的网络服务器。
我将 express-session
模块 (https://github.com/expressjs/session) to handle web sessions and connect-redis
(https://github.com/tj/connect-redis) 用于会话存储。我相信这与商店的类型无关,但如果你问我告诉你。
用户登录后更改了一些敏感数据,例如。更改密码,我想更新ssid。所以我使用 req.session.regenerate()
。但是,在函数调用之后,所有其他会话数据都丢失了。更新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);
});