快速会话不起作用 - 每次请求时都有新会话

时间:2016-07-16 04:13:16

标签: session express 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数据库中。

这似乎是一个直截了当的问题,但我根本想不出来。

1 个答案:

答案 0 :(得分:0)

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

为什么不使用浏览器进行测试。

或者如果你仍然想要卷曲,那么使用像这样的-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})
 }));