我正在开发一个使用 Express 和 SocketIO 的 Node 应用程序。我想在我的 Express 控制器中设置一个 cookie,然后可以从我的客户端 Javascript 代码访问它。我尝试的一切似乎都不起作用:
res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });
我在这里缺少什么吗?提前致谢!
弄清楚了!默认情况下,Express 将选项 httpOnly 设置为 true。这意味着客户端 Javascript 无法访问您的 cookie。为了正确设置客户端可访问的 cookie,只需使用如下代码段:
res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false});
我还注意到,如果您调用此命令然后调用 res.redirect,则不会设置 cookie。该命令需要在某些时候跟随 res.render 才能工作。不知道为什么会这样。
实际上,我已经经历了几个小时的相同问题。
这是我的代码:
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 工作。
所以要在 http 中访问,我们可以使用:
res.cookie("mycookie", "1234567890", { secure:false, maxAge:120000, httpOnly: true });?