2011-03-10 61 views
7

我正在使用Node.js服務器,並且正在使用Connect框架進行開發。我試圖在給定的時間間隔後重新生成SID以避免會話固定。有一種方法稱爲req.session.regenerate根據文檔,應該這樣做。使用Nodejs連接重新生成會話ID

«爲了再生會話簡單地 調用該方法,一旦完成一個新 SID和Session實例將在req.session被 初始化»

示例代碼:

req.session.regenerate(function(err){ 
    // will have a new session here 
}); 

在調用上述方法之後,我檢查了req.sessionID的值,結果發現值與befor即

如果我嘗試從req.session.regenerate中獲取sessionID並將其寫入終端,我會得到一個新的SID,這更加令人困惑〜IE爲什麼要只在範圍內生成SID?回電話?如果我將該值賦給全局變量,它的值是未定義的。

我有一種感覺,那就是我忽視的東西。

任何幫助表示讚賞。

+1

你在哪裏/何時檢查'req.sessionID'?也許你正在檢查的代碼實際上是在重新生成函數運行之前檢查的。 – 2011-03-10 22:13:30

+0

我一直在幾個地方檢查。之前,從內部和之後再生以比較這些值。我使用console.log將req.session.id的值發送到終端。它們之間沒有任何區別。 – 2011-03-11 03:21:46

+0

你解決了嗎?我有另一個稍微不同的問題:http://stackoverflow.com/questions/5646905/why-do-i-have-to-create-a-local-reference-to-a-request-session-object-in -nodejs – Lewis 2011-04-13 10:24:58

回答

1

只需在回生函數中發送迴應即可。由於會話重新生成是異步的,當你返回到客戶端時,它仍然會有舊的會話。

req.session.regenerate(function(err) { 
           req.session.myid = "myvalue"; 
           res.simpleJSON(200, status); 
         });