2012-06-10 17 views
30

我正在使用Express和SocketIO的Node應用程序。我想在我的Express控制器中設置一個cookie,然後通過我的客戶端Javascript代碼訪問它。我嘗試的所有東西似乎都不起作用:快速設置客戶端可訪問Cookie

res.setHeader('Set-Cookie','test=value'); 
res.cookie('rememberme', 'yes', { maxAge: 900000 }); 

有什麼我在這裏失蹤?提前致謝!

+0

可能有助於顯示的客戶端代碼。 – ebohlman

+0

我剛剛進入Chrome檢查器並查看cookie。雖然沒有看到任何東西... – dshipper

回答

48

想通了!默認情況下,Express將選項httpOnly設置爲true。這意味着您的Cookie不能被客戶端Javascript訪問。爲了正確設置cookie在客戶端上訪問只是使用像一個片段如下:

res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false}); 

我也注意到,如果調用此命令,然後調用res.redirect,cookie將不會被置。這個命令需要在res.render之後的某個時刻才能工作。不知道這是爲什麼。

+0

這是一個很好的信息。你有沒有機會知道如何在express框架中訪問服務器端的客戶端Cookie? – user644745

+5

@ user644745您可以通過查看'res.cookies'對象在Express中讀取Cookie。例如,名爲'session_id'的cookie將存在於'res.cookies.session_id'。 http://expressjs.com/api.html#req.cookies – frontendbeauty

+1

你需要調用res.render或res.send的原因是因爲設置cookie不會啓動響應。發送和渲染。這個cookie方法只是給響應對象添加一個cookie。 –

3

其實我幾個小時都遇到過同樣的問題。

這裏是我的代碼:

res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true }); 

我可以看到在響應頭的Set-Cookie指令,但在Chrome中我找不到的cookie,我不能req.cookies發現的cookie [」的myCookie「。

此問題的根本原因是我沒有使用HTTPS連接。 (快遞4.x版與cookie的解析器中間件)

根據這份文件:Simple Steps to Secure Your Express Node App

如果我設置的選項安全= true,則瀏覽器不會把我的cookie在任何HTTP請求,但是HTTPS安全連接。然後,我刪除安全:true選項後,我得到了我的cookie工作。

0

所以在HTTP訪問可以我們使用:

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?