【发布时间】:2021-03-05 14:11:48
【问题描述】:
简介
我在发送跨域会话 cookie 时遇到问题,搜索后我更加困惑。
最初我在foo.vercel.com 上有一个客户端(下一个应用程序),在bar.heroku.com 上有一个api(Express)。
发送和保存 cookie 在 localhost 上正常工作,但部署后我遇到了 sameSite 默认设置为 lex 的问题。所以我把它改成了none。但我发现sameSite none 需要在cookie 集上设置secure 标志,所以我也更改了它。
问题
将secure 设置为true 后,不再发送cookie。
如果设置了安全,并且您通过 HTTP 访问您的网站,将不会设置 cookie。
我的服务器和客户端都托管在 HTTPS 上。我检查了 heroku 上的日志,请求协议是 HTTPS ......但是当我从 GraphQL 解析器 console.log 一个 request.protocol 时,协议是 HTTP:
看到this之后
没有跨域 cookie 这样的东西。您可以在 foo.example.com 和 bar.example.com 之间共享一个 cookie,但不能在 example.com 和 example2.com 之间共享一个 cookie
我将客户端移至baz.heroku.com,但问题仍然存在。
为了检查一切是否仍然有效,我在chrome://flags 中禁用了 Cookies without SameSite must be secure 并且它可以正常工作。
问题
- 是否可以跨域设置cookie?
- 为什么 POST 方法的协议与我在 express 服务器中收到的请求不同。 (我从 express 获取请求并通过上下文将其传递给 GraphQL 解析器)
- 当然还有如何将 cookie 发送到不同域的客户端。
我将不胜感激。
【问题讨论】:
标签: node.js express cookies graphql cross-domain