2013-01-19 27 views
8

Ho riscontrato un problema con le sessioni express e ajax. La mia applicazione riceve richieste tramite Ajax (POST & GET) e imposta una variabile di sessione. Mentre le sessioni funzionano bene se la richiesta non proviene da Ajax, nel caso opposto semplicemente non funzionano. Per esempio:node.js express ajax sessions

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

}

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

ora quando faccio localhost: 3000/tutto va bene, si incrementa ogni volta. Se faccio lo stesso da angolare via $ http continuo a ottenere 1. Ho provato lo stesso in PHP solo nel caso ci fosse qualcosa di sbagliato con angolare ma funziona bene. Si prega di notare che la chiamata AJAX viene da localhost: 80

mio espresso impostazione:

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

facendo console.log (req); Ho notato che quando non proviene da AJAX ottengo:

cookies: 

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

ma quando venendo da AJAX ottengo {}

+0

Per quanto ne so, il nodo/esprimere non distinguere tra le richieste XHR/non-XHR a meno che non si cambia esplicitamente qualcosa. Se pubblichi il codice per il tuo percorso Ajax, questo può aiutare a diagnosticare il problema. – hunterloftis

+0

il problema era nella porta, in modo che funzioni correttamente ho dovuto impostare il flag withCredentials su true nella chiamata ajax. Quindi sul lato server, ho dovuto aggiungere res.header ('Access-Control-Allow-Credentials', 'true'); e tutto va bene. – mbouclas

risposta

7

su node.js :

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

su Ajax:

xhr.withCredentials = true; 
+1

Che cosa fa esattamente questo? –