2013-05-24 10 views
5

Desidero modificare un cookie di sessione dopo una richiesta asincrona, ma indipendentemente da ciò che ho provato, continuo a non riuscire. La mia richiesta è la seguente:I cookie di sessione non vengono modificati utilizzando il server ajax e 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'); }); 

Impostazione delle variabili di sessione sul server.

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

L'impostazione sul server sono i seguenti:

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

ho dimenticato di dire che su semplici richieste dei cookies di sessione cambiano come previsto. Qualche idea?

risposta

6

Dovresti chiamare req.session.save() dopo le modifiche se lo stai facendo con 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); 
}; 
Problemi correlati