会话cookie不会使用ajax和nodejs服务器进行更改

我想在asynchronous请求后更改会话cookie,但不pipe我尝试过什么,我一直在失败。 我的要求如下:

$.ajax({ type: "POST", url: "/setStatus", data: { userId : _userId, token: _token, tokenSecret : _tokenSecret, service : service, loggedIn : _loggedIn, authorized : _authorized }, xhrFields: { withCredentials: true }, crossDomain: true }).done(function(reply) { alert('finished'); }); 

在服务器上设置会话variables。

 exports.setStatus = function(req, res) { req.session.userId = req.body.userId; req.session.token = req.body.token; req.session.tokenSecret = req.body.tokenSecret; req.session.service = req.body.service; req.session.loggedIn = req.body.loggedIn; req.session.authorized = req.body.authorized; res.header('Access-Control-Allow-Credentials', 'true'); res.writeHead(200); }; 

服务器上的设置如下:

 app.use(express.favicon()); app.use(express.logger('dev')); app.use(express.cookieParser()); app.use(express.bodyParser()); app.use(express.session({ secret: 'keyboard cat', store: new RedisStore({ host: 'localhost', port: 3000, client: dbcon })})); app.use(express.methodOverride()); app.use(passport.initialize()); app.use(passport.session()); app.use(express.static(path.join(__dirname, 'public'))); app.use(app.router); 

我忘了提到,在简单的请求会话cookie改变预期。 有任何想法吗?

你应该在修改之后调用req.session.save(),如果你正在使用ajax。

 exports.setStatus = function(req, res) { req.session.userId = req.body.userId; req.session.token = req.body.token; req.session.tokenSecret = req.body.tokenSecret; req.session.service = req.body.service; req.session.loggedIn = req.body.loggedIn; req.session.authorized = req.body.authorized; req.session.save(); // This saves the modifications res.header('Access-Control-Allow-Credentials', 'true'); res.writeHead(200); };