2013-01-19 55 views
8

我遇到了express和ajax會話的問題。我的應用程序通過Ajax接收請求(POST & GET)並設置會話變量。雖然會話工作正常,如果請求不是來自ajax,在相反的情況下,他們只是不工作。例如:node.js表示ajax會話

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

}

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

現在,當我做本地主機:3000 /一切都很好,它增加每次。如果我通過$ http從角度做同樣的事情,我會一直得到1.我在PHP中嘗試過相同的情況,以防萬一有角度出現問題但它工作得很好。請注意,Ajax調用來自本地主機:80

我快速設置:

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) 

編輯

做的console.log(REQ);我注意到,當不從AJAX來我得到:

cookies: 

{PHPSESSID: 'jm2p2kn7etmofrp48s8sv4pu47', ZDEDebuggerPresent: 'PHP', '': 'PHTML', user_admin: 'MTUzOnJvb3Q6U2ptaHJpZmllaG8 =', 「 connect.sess': 'S:記者:{ 「ID」:7} .oIAoC356/z4fQ ++ iH44N7YxWZWEP49bTHp1h/gpAElY' }

而是來自AJAX來當我得到{}

+0

據我所知,節點/快遞不XHR /非XHR請求區分,除非你明確地改變一些東西。如果您發佈了您的ajax路由的代碼,那可能有助於診斷問題。 – hunterloftis

+0

問題出在端口上,爲了正常工作,我必須在ajax調用中將withCredentials標誌設置爲true。然後在服務器端,我不得不添加res.header('Access-Control-Allow-Credentials','true');一切都很好。 – mbouclas

回答

7

上的node.js :

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

關於Ajax:

xhr.withCredentials = true; 
+1

這到底是什麼? –