2013-01-19 21 views
8

Ich habe ein Problem mit Express-und AJAX-Sitzungen. Meine Anwendung empfängt Anfragen über Ajax (POST & GET) und richtet eine Sitzungsvariable ein. Während Sitzungen gut funktionieren, wenn die Anfrage nicht von Ajax kommt, im gegenteiligen Fall funktionieren sie einfach nicht. Zum Beispiel:node.js Express AJAX-Sitzungen

if (typeof req.session.id == 'undefined'){ 
req.session.id = 1; 

}

else { 
req.session.id++; 
} 
res.send({session:req.session.id}); 

jetzt, wenn ich tun localhost: 3000/alles gut ist, erhöht es jedes Mal. Wenn ich das selbe von eckig über $ http mache, bekomme ich immer 1. Ich habe das selbe in PHP ausprobiert, nur für den Fall, dass etwas nicht stimmt, aber es funktioniert gut. Bitte beachten Sie, dass der Ajax-Aufruf von localhost kommt: 80

Mein Express-Setup:

app.use(express.bodyParser()); 
app.use(express.cookieParser('secret')); 
app.use(express.cookieSession({secret:'mySecret'})); 
app.use(express.session({store:new express.session.MemoryStore(),maxAge : new Date(Date.now() + 3600000)})); 
app.use(app.router) 

EDIT

von console.log (erf) zu tun; Ich bemerkte, dass, wenn sie nicht von AJAX kommt erhalte ich:

cookies: 

{PHPSESSID: 'jm2p2kn7etmofrp48s8sv4pu47', ZDEDebuggerPresent: 'php', '': 'phtml', user_admin: 'MTUzOnJvb3Q6U2ptaHJpZmllaG8 =', ' connect.sess': 's: j: { "id": 7} .oIAoC356/z4fQ ++ iH44N7YxWZWEP49bTHp1h/gpAElY' }

aber, wenn sie von AJAX kommt i get {}

+0

Soweit ich weiß, wird der Knoten/ausdrücken unterscheiden nicht zwischen XHR/Nicht-XHR-Anfragen, wenn Sie ausdrücklich etwas ändern. Wenn Sie den Code für Ihre Ajax-Route veröffentlichen, kann dies helfen, das Problem zu diagnostizieren. – hunterloftis

+0

Das Problem war im Port, damit es richtig funktioniert, musste ich das withCredentials-Flag auf den AJAX-Aufruf auf True setzen. Auf der Serverseite musste ich res.header hinzufügen ('Access-Control-Allow-Credentials', 'true'); und alles ist gut. – mbouclas

Antwort

7

auf node.js :

res.header('Access-Control-Allow-Credentials', 'true'); 

auf Ajax:

xhr.withCredentials = true; 
+1

Was genau macht das? –