在重定向到ExpressJS中的另一个页面后,会话处于UNDEFINED状态

时间:2013-11-19 14:55:36

标签: node.js session express

我想做的是

- >使用一个发布到'/ check_user'的逻辑表单

- > check_user具有生成会话的逻辑,它可以完美地创建会话

- >然后它重定向到'/ chat',受到verify()函数

的限制

- >如果持续存在,验证会检查会话(在这一点上始终没有为某些原因定义)

- > check_user会创建会话并且它会在那里继续存在,但是当重定向到“/ chat”并点击验证时,会话就会丢失。

这是我正在使用的代码片段,我没有使用任何模板引擎,而是纯HTML文件。任何帮助都非常感谢。谢谢!

app.use(express.static(__dirname + '/public'));

app.get('/login', function (req, res) {
res.sendfile(__dirname + '/public/index.html');
});

app.get('/chat', verify, function(req, res){
 res.sendfile(__dirname + '/public/chat.html');
});


// when login form is posted to check_user, handle the username and passwords validation.
  app.post('/check_user', function(req, res){

  req.session.regenerate(function(){
    req.session.user = "test";

    //debugging codes debug code 1
    console.log("3");
    console.log(req.session.user);
    //End debugging codes

    res.redirect('/chat');
  });

});

功能验证(req,res,next){

  console.log(req.session.user);

  if (req.session.user) {

      console.log("1");//debug code 2

    next();

  } else {

      console.log("2");//debug code 3

    req.session.error = 'Access denied!';

    res.redirect('/login');

  }
};

1 个答案:

答案 0 :(得分:1)

固定!它。问题是我在ajax提交后使用res.render。我在ajax提交上使用了window.location并且它有效。

我发现的另一件事是,
删除此闭包使我的会话在整个应用程序中保持不变

req.session.regenerate(函数(){

});