【问题标题】:NodeJs express-session don´t save the sessionNodeJs express-session 不保存会话
【发布时间】:2018-06-30 06:09:14
【问题描述】:

我在 NodeJs 脚本上方的会话中保存一些内容时遇到了问题。如果我启动脚本并像这样进行登录后:

app.post('/login', function(req, res) {
   sess = req.session;
   sess.key = "SecureKEy";
   console.log(sess);
});

我得到了我想要的东西:

会话 { 曲奇饼: { 小路: '/', _expires:空, 原始最大年龄:空, httpOnly: 真 }, 密钥:'SecureKEY' }

但是,如果我使用此代码重新加载页面,则 session.key 为空。就像它没有保存一样。

app.get('/', function(req, res) {
   sess = req.session;
   console.log(sess);
   res.sendFile(__dirname+'/wwwroot/index.html');
});

我的快速会话配置是这样的:

const session = require('express-session');
app.use(session({
   secret: 'importent',
   resave: true,
   saveUninitialized: true
}));

【问题讨论】:

  • 总是声明变量!
  • sess 将在全球范围内发布
  • 这是一个设计错误。您无法在请求处理程序之外访问会话。
  • 抱歉,我哪里弄错了?

标签: javascript node.js express session


【解决方案1】:

我已经像这样重写了代码:

app.post('/login', function(req, res) {
   console.log("Before: ");
   console.log(sess);
   sess = req.session;
   sess.key = "SecureKEy";
   req.session.save();
   console.log("After: ");
   console.log(sess);
});

这样它就可以正常工作。但是,如果我用 res.send 重新发送登录页面,会话会自动保存吗?对吗?

【讨论】:

    【解决方案2】:

    express-session 自动保存边缘情况?

    对于某些快速响应传输方法,肯定不会触发 express-session save(...) 方法。对于response.send(...)response.json(...)等经常遇到的,似乎一直触发。

    但对于特殊情况的传输方法(例如express.response.end() 方法)并非如此——至少从我的观察来看;还有response.sendFile(...)根据OP和response.redirect(...)根据其他地方的帖子。

    为避免不可预见的问题,在将 express-session 应用于使用特殊情况响应传输方法的请求时,请密切注意。 可能必须直接调用 express-session save(...) 方法来持久化在这些请求期间所做的更改。 即使这样,也不能保证持久化会发生。

    例如,有时将值设置为 null 和/或调用 session.destroy(...) 和/或 session.regenerate(...) 方法无效。那些破坏会话数据基本上会在下一页刷新时重新出现。甚至调用save(...) 方法或将unset 选项设置为'destroy' 都无法解决这种情况。

    快速会话自述文件 应在页面顶部的 Note 部分中包含这些极端情况场景。它将抑制围绕其自动保存功能的一些不利因素。

    我对这类事情的理念是:当一个包对于一个用例来说过于古怪时,要么找到一个更合适的包,要么尽可能只采购自己的解决方案。变通办法往往会扭曲应用程序逻辑,从而使其容易出错且难以随着时间的推移进行维护。

    【讨论】:

      猜你喜欢
      • 2019-07-17
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2012-03-20
      • 2018-10-10
      • 1970-01-01
      • 2013-06-20
      相关资源
      最近更新 更多