在Node.js和express-session中更改和刷新会话数据

Moh*_*iba 1 javascript session node.js

我正在使用Node.js和express-session,我得到了这个包含用户信息的会话数据

req.session.user
Run Code Online (Sandbox Code Playgroud)

现在,当用户更新信息时,我将会话设置为新数据,然后重新加载

req.session.reload(function(err) {
req.session.user = user;
});
Run Code Online (Sandbox Code Playgroud)

它应该工作,但req.session.user仍然显示旧信息,为什么?:(
非常感谢提前

Chr*_*ett 8

您在保存更改之前正在重新加载.保存通常在请求结束时自动发生.session.js中有一个测试,用于演示该行为.

使用req.session.reload()还原处理请求时当前所做的更改...

req.session.example = 'set on set_reload'
req.session.reload( function (err) {
    res.render('index', { title: req.session.example });
});
// next http get request
// req.session.example == value before the call above 
Run Code Online (Sandbox Code Playgroud)

考虑使用这样的会话

req.session.example = 'set on set';
res.render('index', { title: req.session.example });
// next http get
// req.session.example == 'set on set'
Run Code Online (Sandbox Code Playgroud)

如果您有真正的使用理由,req.session.reload()那么此类用法将为您提供所需的行为

req.session.example = 'set on set_save_reload';
req.session.save( function(err) {
    req.session.reload( function (err) {
         res.render('index', { title: req.session.example });
    });
});
// next http get
// req.session.example == 'set on set_save_reload'
Run Code Online (Sandbox Code Playgroud)

  • 除非您要撤消对用户会话的任何未保存更改,否则请勿重新加载.只需指定新值,``session``将保存该值. (2认同)