我正在使用Express和SocketIO的Node应用程序。我想在我的Express控制器中设置一个cookie,然后可以从我的客户端Javascript代码访问它。我尝试的所有东西似乎都不起作用:
res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });
这里有什么我想念的吗?提前谢谢!
答案 0 :(得分:51)
想出来!默认情况下,Express将选项httpOnly设置为true。这意味着客户端Javascript无法访问您的cookie。为了正确设置客户端上可访问的cookie,只需使用以下代码段:
res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false});
我还注意到,如果你调用这个命令然后调用res.redirect,那么cookie就不会被设置。此命令需要在某个时刻由res.render执行,以使其工作。不知道为什么会这样。
答案 1 :(得分:3)
实际上我在几个小时内遇到了同样的问题。
这是我的代码:
res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true });
我可以在响应标题中看到Set-Cookie指令,但在Chrome中我找不到cookie,我找不到req.cookies ['mycookie']的cookie。
此问题的根本原因是我没有使用HTTPS连接。 (Express 4.x with cookie-parser middleware)
根据这份文件:Simple Steps to Secure Your Express Node App
如果我设置选项secure = true,那么浏览器不会在任何HTTP请求中发送我的cookie,而是HTTPS安全连接。然后我删除了secure:true选项后,我的cookie就运行了。
答案 2 :(得分:0)
所以要在http中访问我们可以使用:
res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?