2016-07-16 152 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}) 
}));