Express nodejs会话cookie:req.cookies [' connect.sid']未生成,每次刷新后req.sessionID都不同

时间:2016-02-04 18:37:50

标签: node.js session express cookies sessionid

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

2 个答案:

答案 0 :(得分:1)

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

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

  res.sendStatus(200);
});

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

答案 1 :(得分:0)

req.session.idreq.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.sessionID stays 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。

我认为他们是一些错误。