首页 > 解决方案 > 在多级子域之间共享 cookie

问题描述

我无法理解为什么 cookie 保存在我的应用程序的一个场景中,而不是另一个场景中。

我有多个服务,每个服务都有自己的子域,互相发出 REST 请求。在一种情况下,service.example.comlogin.example.com发出 POST 请求。我将 fetch API 与credentials: include. 我也用 axios 进行了测试,withCredentials: true结果相同。成功的响应有一个Set-Cookie带有 JWT 和域的标头,example.com在这种情况下,浏览器会按预期保存 cookie。

现在,有一个反映生产设置的开发环境设置,只有每个 URL 都在dev.example.com下。所以在开发环境中service.dev.example.com向login.dev.example.com发出相同的 POST 请求。在这种情况下,如果 cookie 域是example.com,它会继续按预期工作。

但是,如果我将开发环境中的 cookie 域更改为dev.example.com,则浏览器(在最新的 Chrome 和 Firefox 上测试)将不再保存 cookie,即使涉及的每个 URL 仍然在 cookie 域的子域中。

我已经阅读了RFC6265 上的域匹配部分,我的设置似乎满足了那里列出的每个条件。

有谁知道为什么它在这种情况下不起作用?有什么方法可以让我的测试设置不存储也将用于对 prod 环境的请求的 cookie?

谢谢。

标签: httpcookiesjwtfetch-apisetcookie

解决方案


推荐阅读