2015-06-26 24 views
1

我使用的內存存儲基本節點快遞會話設置和我在服務器上的代碼:Session變量不會持續到下一個請求

app.use(require('express-session')({ 
    secret: 'keyboard cat', 
    resave: false, 
    saveUninitialized: true, 
    cookie: { secure: true } 
})); 

app.post('/api/logIn', function(req, res) { 
    req.session.userName = req.body.userName; 
} 

app.get('/api/getProfile', function(req, res) { 
    User.findOne({'userName' : req.session.userName}, 
     function (err, userProfile) { 
     console.log('getProfile executed for user:' + req.session.userName); 
     if (err) throw err; 
     console.log(userProfile); 
    }); 
}); 

的問題是即req.session.userName from getProfile route is undefined,雖然它不在之前的登錄路由請求中。我檢查了HTTP頭,奇怪的是沒有處理來自服務器或客戶端的cookie的頭文件。現在我不知道可能是什麼問題。

回答

3

你說cookie: { secure: true },但你的網絡服務器實際上是在一個安全的連接?如果沒有,那麼cookie將不會被寫入。

docs

請注意安全:真的是一個推薦的選項。但是,其 需要啓用https的網站,即,對於安全 Cookie,HTTPS是必需的。如果設置了安全性,並且您通過HTTP訪問您的站點,則不會設置Cookie。

+0

服務器沒有使用HTTPS,所以有一個錯誤。但是,當我將該選項更改爲false時,同樣的問題仍然存在:(。 –

+0

您是否正在使用'body-parser'? – Patosai

+0

是的,這些都是我正在使用的所有中間件:app.use(express.static(__ dirname ('body');}}; app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended:true })); app.use(require('express-session ')({... –

0

會話需要被存儲在cookie中,所以我們用它來解析它,一定是這樣的:

var cookieParser = require('cookie-parser'); 

// must use cookieParser before expressSession 
app.use(cookieParser()); 

完整的示例:http://code.runnable.com/U0tEnHwraXYyp-JG/simple-usage-of-express-session-and-cookie-parser-with-express-for-node-js

+1

[不再需要](https://github.com/expressjs/session#cookie-options)用於最近版本的'express-session'。 – robertklep

+0

謝謝@robertklep –