微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我想在异步请求之后更改会话cookie,但无论我尝试了什么,我都会失败.
我的要求如下:

$.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'); });

在服务器上设置会话变量.

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按预期更改.
有任何想法吗?

解决方法

如果使用ajax进行修改,则应在修改调用req.session.save().

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐