Express nodejs session cookies:req.cookies['connect.sid']不生成,每次刷新后req.sessionID都不一样

Express nodejs session cookies: req.cookies['connect.sid'] is not generated and req.sessionID is different after each refresh

我使用 express 4.13.3 和 express-session 1.11.3。这是我的配置会话:

app.use( session({/*store: new redis_store,*/name: 'connect.sid', secret: 'azerty is qwerty', resave: false, saveUninitialized: false, cookie:{httpOnly: false, secure: false, maxAge: null}}) );

这里我打印 req.cookies['connect.sid']req.sessionID :

app.get("/", function (req, res) {
  console.log(req.sessionID);
  console.log(req.cookies['connect.sid']);

  res.sendStatus(200);
});

每次刷新时 req.sessionID 不同的 并且 req.cookies['connect.sid'] 未定义的 。几个月前,由于 req.sessionID 在刷新时发生变化,我决定使用 req.cookies['connect.sid'] 并且它非常有效。今天我检查了我的代码,我注意到 connect.sid 不再存在于 cookie 中。

那么问题是什么?如何使用 cookie 的会话 ID?

我认为您需要像这样访问这些对象:

app.get('/', function (req, res) {
  console.log(req.session.id);
  console.log(req.session.cookie);

  res.sendStatus(200);
});

另外 express-session docsconnect.sid 是会话 cookie 的默认名称,因此您不需要像现在这样指定它。

req.session.idreq.sessionID 相同,req.session.cookie 是会话配置对象。

经过一些测试后我得出结论,如果您想访问 req.cookies['connect.sid'],您需要 使用 手动会话。例如,您可以编写 req.session.i = 1 或其他任何内容。然后 id connect.sid 将在您的导航器中可见(例如使用 Chrome Dev Tools)。此外,如果您希望 req.sessionID 保持不变,您一定不要忘记在函数末尾调用 res.sendStatus(200) 或其他响应。

但有一个问题仍然存在。看这段代码:

app.post("/upload-files", upload.array('files'), function (req, res, next) { 
    if(!req.session.i) req.session.i = 0;
    ++req.session.i;
    console.log("i: " + req.session.i);
}

在这里,我使用 multer 发送一个 post 请求,其中包含一组文件。由于 multer 不适用于“files[]”形式的名称(参见 multer-not-accepting-files-in-array-format-gives-unexpected-filed-error-used),我不得不将文件一一发送。这里出现了问题:变量 i 不会持续存在,而是保持等于 1.

我认为它们是一些错误。