我在node / html项目中使用express 4和express-session时遇到问题。
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
中的第一个字符是登录状态,其余文本是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);
}
答案 0 :(得分:1)
由于您使用数据库作为会话存储,因此regenerate()
调用很可能是异步的。这意味着在调用回调之前不会执行regenerate()
所以你需要这样做:
request.session.regenerate(function(err) {
// should do error checking here
if (request.session.views ) {
// empty
} else {
request.session.views = 1;
request.session.username = username;
}
// continue with the rest of your code flow here inside the callback
});
此处提供会话文档:https://github.com/expressjs/session#sessionregenerate