我正在使用Express和SocketIO的Node應用程序。我想在我的Express控制器中設置一個cookie,然後通過我的客戶端Javascript代碼訪問它。我嘗試的所有東西似乎都不起作用:快速設置客戶端可訪問Cookie
res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });
有什麼我在這裏失蹤?提前致謝!
我正在使用Express和SocketIO的Node應用程序。我想在我的Express控制器中設置一個cookie,然後通過我的客戶端Javascript代碼訪問它。我嘗試的所有東西似乎都不起作用:快速設置客戶端可訪問Cookie
res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });
有什麼我在這裏失蹤?提前致謝!
想通了!默認情況下,Express將選項httpOnly設置爲true。這意味着您的Cookie不能被客戶端Javascript訪問。爲了正確設置cookie在客戶端上訪問只是使用像一個片段如下:
res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false});
我也注意到,如果調用此命令,然後調用res.redirect,cookie將不會被置。這個命令需要在res.render之後的某個時刻才能工作。不知道這是爲什麼。
這是一個很好的信息。你有沒有機會知道如何在express框架中訪問服務器端的客戶端Cookie? – user644745
@ user644745您可以通過查看'res.cookies'對象在Express中讀取Cookie。例如,名爲'session_id'的cookie將存在於'res.cookies.session_id'。 http://expressjs.com/api.html#req.cookies – frontendbeauty
你需要調用res.render或res.send的原因是因爲設置cookie不會啓動響應。發送和渲染。這個cookie方法只是給響應對象添加一個cookie。 –
其實我幾個小時都遇到過同樣的問題。
這裏是我的代碼:
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工作。
所以在HTTP訪問可以我們使用:
res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?
可能有助於顯示的客戶端代碼。 – ebohlman
我剛剛進入Chrome檢查器並查看cookie。雖然沒有看到任何東西... – dshipper