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 docs 说 connect.sid
是会话 cookie 的默认名称,因此您不需要像现在这样指定它。
req.session.id
与 req.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.
我认为它们是一些错误。
我使用 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 docs 说 connect.sid
是会话 cookie 的默认名称,因此您不需要像现在这样指定它。
req.session.id
与 req.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.
我认为它们是一些错误。