dsh*_*per 32 cookies node.js express socket.io
我正在使用Express和SocketIO的Node应用程序.我想在我的Express控制器中设置一个cookie,然后可以从我的客户端Javascript代码访问它.我尝试的一切似乎都不起作用:
res.setHeader('Set-Cookie','test=value');
res.cookie('rememberme', 'yes', { maxAge: 900000 });
Run Code Online (Sandbox Code Playgroud)
这里有什么我想念的吗?提前致谢!
dsh*_*per 53
弄清楚了!默认情况下,Express将选项httpOnly设置为true.这意味着客户端Javascript无法访问您的cookie.为了正确设置客户端上可访问的cookie,只需使用以下代码段:
res.cookie('rememberme', 'yes', { maxAge: 900000, httpOnly: false});
Run Code Online (Sandbox Code Playgroud)
我还注意到,如果你调用这个命令然后调用res.redirect,cookie就不会被设置.此命令需要在某个时刻由res.render执行,以使其工作.不知道为什么会这样.
小智 5
事实上,我在几个小时内经历了同样的问题。
这是我的代码:
res.cookie("mycookie", "1234567890", { secure:true, maxAge:120000, httpOnly: true });
Run Code Online (Sandbox Code Playgroud)
我可以在响应头中看到 Set-Cookie 指令,但在 Chrome 中我找不到 cookie,也无法通过 req.cookies['mycookie'] 找到 cookie。
这个问题的根本原因是我没有使用HTTPS连接。(带有 cookie 解析器中间件的 Express 4.x)
根据此文档:保护 Express Node 应用程序安全的简单步骤
如果我设置选项 secure=true,那么浏览器将不会在任何 HTTP 请求中发送我的 cookie,而是在 HTTPS 安全连接中发送。然后在我删除 secure:true 选项后,我得到了 cookie 的工作。
归档时间: |
|
查看次数: |
24297 次 |
最近记录: |