在Express中设置客户端可访问Cookie

时间:2012-06-10 06:03:42

标签: node.js cookies express socket.io

我正在使用Express和SocketIO的Node应用程序。我想在我的Express控制器中设置一个cookie,然后可以从我的客户端Javascript代码访问它。我尝试的所有东西似乎都不起作用:

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

这里有什么我想念的吗?提前谢谢!

3 个答案:

答案 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 });?