我在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 redirect-登录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);
}
最佳答案
由于您将数据库用作会话存储,因此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