2013-05-24 28 views
5

Tôi muốn thay đổi cookie phiên sau một yêu cầu không đồng bộ nhưng không có vấn đề gì tôi đã thử tôi tiếp tục thất bại. Yêu cầu của tôi như sau:Cookie phiên không thay đổi bằng cách sử dụng máy chủ ajax và nodejs

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

Đặt biến phiên trên máy chủ.

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

Các thiết lập trên máy chủ như sau:

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

Tôi quên kể rằng trên yêu cầu đơn giản là cookie phiên thay đổi như mong đợi. Bất kỳ ý tưởng nào?

Trả lời

6

Bạn nên gọi req.session.save() sau khi sửa đổi nếu bạn đang làm nó với 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); 
}; 
Các vấn đề liên quan