我在使用express/session和node/html項目時遇到問題。Nodejs:會話在生成後未定義
login.html
對節點程序進行ajax調用。如果成功,節點將生成一個會話,記住屬性
req.session.username
中的用戶名並將文件名csmain.html
返回到login.html
。然後login.html
將瀏覽器重定向到csmain.html
。csmain.html
然後立即在其load()
作出ajax呼叫,但問題是在這個時候會議似乎沒有準備好。req.session.user
在節點中未定義。這意味着該會話尚未被瀏覽器在load()
的ajax調用中使用。
任何想法如何解決這個問題?在節點的登錄部分
代碼來生成會話
request.session.regenerate(function(err) {
});
if (request.session.views) {
// empty
} else {
request.session.views = 1;
request.session.username = username;
}
HTML重定向在登錄HTML --javascript一部分。在xmlHttp.responseText
的第一個字符是登錄狀態,剩餘的文本是由於您使用一個數據庫作爲一個會話存儲,那麼它很可能是regenerate()
調用是異步的HTTP鏈接
if (status === BDX_ERR_SQL_WRONG_PASSWORD) {
document.getElementById("feedbackMsg").innerHTML = 'login error';
}else if (status === '0') {
window.location = '../' + xmlHttp.responseText.substring(1, len);
}
什麼樣的會話存儲您使用的是?在某些情況下,'regenereate()'可能是異步的,這意味着它不會在調用回調之前完成,因此您必須將使用新會話的代碼放入再生回調中。 – jfriend00 2014-10-28 22:07:25
@ jfiend00我使用redis作爲會話的backstore。再生的回調是什麼?我在快速會議網站找不到。你能舉個例子嗎? – StevenZ 2014-10-28 22:20:25