快速会话不起作用 - 每次请求都需要新会话

express sessions do not work - new session upon every request

我使用 express-session 按以下方式设置会话管理:

var express = require('express');
var session = require('express-session');
var app = express();
var mongoose = require('mongoose');
var MongoStore = require('connect-mongo')(session);

mongoose.connect('mongodb://localhost/sessionTest');


app.listen(3000, function () {
});

app.use(session({
    secret: 'justsomestuff',
    resave: false,
    saveUninitialized: false,
    cookie: {  } ,
    store: new MongoStore({mongooseConnection: mongoose.connection})
}));

app.get('/first', function (req, res) {
    console.log('first');
    req.session.test = 'Tester';
    req.session.save();
    console.log(req.sessionID);
    res.send(req.sessionID);
}); 

app.get('/second', function (req, res) {
    console.log('second');
    if (req.session)
            console.log('session exists');
    console.log(req.sessionID);
    console.log(req.session.test);
    res.send(req.sessionID);
});

但是每次我调用 /first 或 /second 时都会使用新的会话 ID 建立一个新会话

curl 127.0.0.1:3000/first
curl 127.0.0.1:3000/second

我用

"connect-mongo": "^1.2.1",
"express": "~4.13.4",
"express-session": "^1.14.0",

所有会话也都在 mongo 数据库中。

这似乎是一个非常简单的问题,但我就是想不通。

您正在使用 curl。并且 curl 不隐式支持 cookie。您必须传递 cookie 值 explicitly via command。并在服务器尝试设置时读取 cookie 等。

为什么不使用浏览器测试呢?

或者如果你仍然想要 curl,那么使用 -b 和 -c 参数,就像这样。

curl -b cookies.txt -c cookies.txt 

-b 告诉 curl 将传入的 cookie 存储在 cookies.txt 中,-c 告诉 curl 将来自 cookies.txt 的所有 cookie 嵌入到此请求中。

此外,通过添加过期字段来延长 cookie 的寿命。

 app.use(session({
    secret: 'justsomestuff',
    resave: false,
    saveUninitialized: false,
    expires: new Date(Date.now() + (60 * 60 * 24 * 7 * 1000)),
    cookie: {  } ,
    store: new MongoStore({mongooseConnection: mongoose.connection})
 }));