34

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

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

我在这里缺少什么吗?提前致谢!

4

3 回答 3

57

弄清楚了!默认情况下,Express 将选项 httpOnly 设置为 true。这意味着客户端 Javascript 无法访问您的 cookie。为了正确设置客户端可访问的 cookie,只需使用如下代码段:

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

我还注意到,如果您调用此命令然后调用 res.redirect,则不会设置 cookie。该命令需要在某些时候跟随 res.render 才能工作。不知道为什么会这样。

于 2012-06-11T05:00:36.630 回答
4

实际上,我已经经历了几个小时的相同问题。

这是我的代码:

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

我可以在响应标头中看到 Set-Cookie 指令,但在 Chrome 中我找不到 cookie,并且我无法通过 req.cookies['mycookie'] 找到 cookie。

这个问题的根本原因是我没有使用HTTPS连接。(带有 cookie-parser 中间件的 Express 4.x)

根据此文档:保护 Express 节点应用程序的简单步骤

如果我设置选项 secure=true,那么浏览器将不会在任何 HTTP 请求中发送我的 cookie,而是在 HTTPS 安全连接中发送。然后在我删除了 secure:true 选项后,我得到了我的 cookie 工作。

于 2014-11-12T14:50:54.180 回答
0

所以要在 http 中访问,我们可以使用:

res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?
于 2017-10-06T08:09:50.150 回答