2016-07-16 113 views
0

我用快递会话建立的会话管理方式如下:快递会话不工作 - 在每次请求新的会话

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); 
}); 

但是,一个新的会话建立一个新的会话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", 

所有会议都在蒙戈数据库以及。

这似乎是一个非常简单的问题,但我根本无法弄清楚。

+0

它看起来并不像是在'curl'调用中实际发回会话cookie。 – robertklep

回答

0

您正在使用卷曲。 curl不隐式支持cookies。您必须通过Cookie值explicitly via command。并且在服务器试图设置等时也读取cookie。

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

或者如果你仍然想卷曲然后使用-b和-c这样的参数。

curl -b cookies.txt -c cookies.txt 

-b告诉curl存储cookie.txt的传入饼干和-c告诉curl从cookie.txt的所有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}) 
}));