2013-05-24 7 views
5

私は非同期リクエスト後にセッションクッキーを変更したいのですが、何を試しても失敗し続けます。セッションクッキーはajaxと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'); }); 

サーバー上のセッション変数の設定:次のように 私の要求があります。次のように

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

私は予想通りセッションクッキーが変更、簡単な要求にそれを言及するのを忘れてしまいました。 アイデア

答えて

6

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); 
}; 
関連する問題