【问题标题】:change and refresh session data in Node.js and express-session在 Node.js 和 express-session 中更改和刷新会话数据
【发布时间】:2015-04-14 17:18:51
【问题描述】:

我正在使用 Node.js 以及 express-session 和 我有这个保存用户信息的会话数据

req.session.user

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

req.session.reload(function(err) {
req.session.user = user;
});

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

【问题讨论】:

  • 你在做 req.session.save() 并且在你之前返回 req.session.reload()?
  • 不,我没有在我的应用程序中执行任何 req.session.save(),但根据 API,这太奇怪了,重新加载应该可以解决问题,对吧?

标签: javascript node.js session


【解决方案1】:

您在保存更改之前正在重新加载。保存通常在请求结束时自动发生。 session.js 中有一个测试demonstrates that behaviour

使用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 

考虑使用这样的会话

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

如果您有使用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'

【讨论】:

  • 感谢您的回答,但它仍然没有重新加载会话,让我稍微解释一下,我将用户的昵称存储在会话中,但是用户可以更改昵称,现在当用户更改时它,拥有昵称的 session.user 也发生了变化,但它没有,所以我需要手动重新加载它。
  • 除非您希望撤消对用户会话的任何未保存更改,否则不要重新加载。只需分配新值,session 就会保存该值。
  • 抱歉耽搁了,感谢您的帮助,我尽可能多地投票,这是我能为您的出色回答做的最少的事情
猜你喜欢
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
相关资源
最近更新 更多