2013-01-19 11 views
8

Mam problem z sesjami ekspresowymi i ajaxowymi. Moja aplikacja odbiera żądania za pośrednictwem Ajax (POST & GET) i ustawia zmienną sesji. Podczas gdy sesje działają poprawnie, jeśli żądanie nie pochodzi z ajax, w przeciwnym przypadku po prostu nie działają. Na przykład:node.js ekspresowe sesje ajaxowe

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

}

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

teraz kiedy zrobić localhost: 3000/wszystko jest dobrze, to zwiększa każdym razem. Jeśli zrobię to samo z kanciastą przez $ http i ciągle otrzymuję 1. próbowałem to samo w PHP, na wypadek, gdyby coś było nie tak z kątowym, ale działa dobrze. Należy pamiętać, że wywołanie ajax pochodzi z localhost: 80

moje wyraźne 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

wykonując console.log (REQ); Zauważyłem, że gdy nie pochodzi z AJAX uzyskać:

cookies: 

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

ale kiedy nadchodzi z AJAX i dostać {}

+0

O ile mi wiadomo, węzeł/wyrażenia nie rozróżnia wniosków XHR/non-XHR chyba że wyraźnie coś zmienić. Jeśli opublikujesz kod dla swojej trasy ajax, może to pomóc w zdiagnozowaniu problemu. – hunterloftis

+0

Problem był w porcie, aby działał poprawnie musiałem ustawić flagę withCredentials na true w wywołaniu ajax. Następnie po stronie serwera musiałem dodać res.header ("Access-Control-Allow-Credentials", "true"); i wszystko jest dobrze. – mbouclas

Odpowiedz

7

na node.js :

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

na AJAX:

xhr.withCredentials = true; 
+1

Co dokładnie to robi? –