NodeJs和ExpressJs不能设置Cookie

你能帮我创buildcookie,因为我不能使它工作。 我想在用户login后设置和创buildcookie,但是我不知道我的代码有什么问题。 多谢你们。

这是我的代码,如果你认为还有其他错误或代码更正,你能帮我修复吗? 多谢你们。 🙂

app.js

//deps var express = require('express'); var app = express(); var redis = require('redis'); var client = redis.createClient(); var delcookie = function(req, res) { res.clearCookie('login_token'); res.redirect('/'); }; var setcookie = function(req, res) { res.cookie('login_token', +new Date(), { maxAge: 3600000, path: '/' }); res.redirect('/'); }; //configs app.use(express.bodyParser()); app.use(express.cookieParser()); app.use(app.router); client.on('error', function (err) { console.log('Error: ' + client.host + ':' + client.port + ' - ' + err); }); app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); app.get('/login/', function (req, res) { res.sendfile(__dirname + '/login.html'); }); app.get('/register/', function (req, res) { res.sendfile(__dirname + '/register.html'); }); app.get('/restricted/', function (req, res) { res.sendfile(__dirname + '/restricted.html'); }); app.get('/logout/', delcookie, function (req, res) { res.sendfile(__dirname + '/logout.html'); }); //post app.post('/login/', function (req, res) { //res.sendfile(__dirname + '/restricted.html'); client.hmget( req.body.user.username, 'password', function (err,pass) { if ( (!err) && pass && pass == req.body.user.password ){ res.redirect('/restricted/', setcookie); } else if ( pass == false) { res.redirect('/register/'); } else { res.redirect('/login/'); } }); }); app.post('/register/', function (req, res) { client.hmset(req.body.user.username, 'password',req.body.user.password, 'fname',req.body.user.fname, 'lname', req.body.user.lname, 'password', req.body.user.password, 'email', req.body.user.email, 'mobile', req.body.user.mobile, redis.print); res.write('Successfully Registered'); }); app.listen(80); 

要使用cookie,您应该查看Express cookieSession中间件。 文档在这里: http : //expressjs.com/api.html#cookieSession

更新 (我现在无法testing,所以这是我记得的):

您可以添加cookieSession中间件,并使用类似的方式指定cookie的设置:

 app.use(express.cookieSession({ cookie: { path: '/', maxAge: 3600000 } })); 

然后,当你的用户login时,你可以在会话中设置login令牌req.session.login_token = 'login_token';

当你的用户注销时,你可以通过req.session = null;来清除会话req.session = null;

在您的身份validation中间件中,您可以检查是否在会话上设置了login标记以查看用户是否已通过身份validation。