我使用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']
,它的工作就像一个魅力。今天我检查了我的代码,我注意到cookie中不存在connect.sid
。
那么问题是什么?我如何使用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' will be visible in your navigator (using GoogleDev for instance). Moreover, if you want that
req.sessionIDstays the same, you have to not forget
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”发送带有一系列文件的发布请求。由于“multer”不能使用“files []”(https://stackoverflow.com/questions/35164282/multer-not-accepting-files-in-array-format-gives-unexpected-filed-error-used)形式的名称,我有义务逐个发送文件。这里出现问题:变量i
将不会持续存在并将保持等于1。
我认为他们是一些错误。