Nodejs:生成后会话未定义

时间:2014-10-28 21:31:20

标签: javascript node.js session

我在node / html项目中使用express 4和express-session时遇到问题。

  1. login.html对节点程序进行ajax调用。

  2. 如果成功,节点会生成一个会话,记住属性req.session.username中的用户名,并将文件名csmain.html返回给login.htmllogin.html然后将浏览器重定向到csmain.html

  3. csmain.html然后立即在其load()中进行ajax调用,但问题是此时会话似乎没有准备好。节点中未定义req.session.user。这意味着浏览器在load()中的ajax调用中未使用该会话。
  4. 任何想法如何解决这个问题?

    节点登录部分中的代码以生成会话

    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);
    }
    

1 个答案:

答案 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