我在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

10-05 20:50
查看更多