Set-Cookie(来自 AJAX)header 未在浏览器中设置 cookie

Set-Cookie (from AJAX) header not setting cookie in browser

我有一个使用 Web API 的单页应用程序。当用户登录时,我希望服务器设置一个 cookie 以进一步识别。

AJAX 请求显然是 HTTP,只是带有一个小标识 header。据我所知,浏览器的代理不应该区分 XMLHttpRequest 和正常请求。特别是因为我使用的是相对较旧版本的 firefox。

应用URL:http://sub.domain.com/app API请求:http://sub.domain.com/service/method

域和子域完全相同。没有尝试更改其他域的 cookie。

如您所见,cookie 已被浏览器的请求解析器识别。即使在全面挖掘 SO 和 Google 之后,我也没有找到一个合乎逻辑的解释来解释为什么这没有设置 cookie。

尝试了一堆不同的 Set-Cookie 参数组合。我认为最稳定的语法是 key=value; expires=date; domain=.domain.com,这就是我在上面的示例中使用的语法。

P.S。 我使用的是实际域和子域,而不是本地主机。 使用相对较旧且稳定的 Firefox 版本。

我认为你的问题在这里得到了很好的解释

对于没有路径属性的 Set-Cookie,RFC6265 指出:

If the server omits the Path attribute, the user agent will use the "directory" of the request-uri's path component as the default value.

因此您还需要从您的服务器设置 path=/ 以确保每个人都可以访问 cookie

编辑-1

还要确保您的网页和 API 都 运行 使用相同的协议。因为如果 cookie 被标记为安全,那么 http url

就无法读取它

出现此问题的原因有两个:

  1. 从 HTTPS 请求到 HTTP 网站的 Set-Cookie header returns。
  2. "Path" 属性未设置,因此它默认为 API URI 的路径(如 Tarun Lalwani 所解释)。

最终有效的语法是:

Set-Cookie: test=working; Domain=.domain.com; Path=/; Secure