快速更改会话每一个请求

我有一个functionlogin

app.post('/doLogin', function(req,res){ db.users.findOne({username: req.body.username}, function(err, user) { if( err ) { console.log("Login fail"); } else if (user != null) { if (req.body.password == user.password) { req.session.user_role = "user"; req.session.save(); } else { req.session.user_role = "null"; console.log("Wrong login"); } } res.send({redirect: "/"}); }); }); 

这个函数用来保存一个variables到会话req.session.user_role = "user"; 但是当新的请求检查用户login或不

 app.get('/', function(req,res){ redis.get('sess:' + req.session.id, function(err, result){ console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null })); }); if ((req.session.user_role == "user")) { console.log("Logged in"); } else { console.log("Logged out"); } }); 

然后返回总是“退出”,因为会话被改变。 我使用Redis来存储会话,我认为这是Redis的错,因为当我停止使用Redis时,它是可以的请帮助我!

做事情的最好方法就是让Express一直处理,如果可以的话。

http://blog.modulus.io/nodejs-and-express-sessions

有一个链接,可以告诉你如何设置快速会话的redis。 在处理会话时,您不必甚至自己查询redis,这是节点中的中间件的工作。

Express会话使用cookie来设置或从客户端获取会话ID

如文件中所述

请注意,secure:true是推荐的选项。 但是,它需要启用https的网站,即HTTPS对于安全cookie是必需的。 如果设置了安全性,并且您通过HTTP访问您的站点,则Cookie不会被设置。

请记住以下几点:

  • 如果您不在HTTPS连接上托pipecookie,则应将安全标志设置为false。

  • 如果您使用HTTPS上承载的代理,则应将信任代理设置为1.请参阅文档


以下选项将解决每个请求会话ID重置的问题

 cookie: { secure: false } 

例如:

 app.use(session({ // your settings cookie: { secure: false } })) 

也许在你的代码中有一些asynchronous错误。 每次你有asynchronous操作(比如callback)时,你都应该确保你的代码在callback函数后执行,所以你可以把代码放到callback函数中。 像这样:

 db.users.findOne({username: req.body.username}, function(err, user) { if( err ) { console.log("Login fail"); } else if (user != null) { if (req.body.password == user.password) { req.session.user_role = "user"; req.session.save(); res.send({redirect: "/"}); } else { req.session.user_role = "null"; console.log("Wrong login"); res.send({redirect: "/"}); } } }); 

app.get应该是这样的:

 app.get('/', function(req,res){ redis.get('sess:' + req.session.id, function(err, result){ console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null })); if ((req.session.user_role == "user")) { console.log("Logged in"); } else { console.log("Logged out"); } }); }); 

如果{secure:true}被设置,并且您通过HTTP访问您的站点,则Cookie将不会被设置。 所以,每个请求都会创build一个新的会话。