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
就无法读取它
出现此问题的原因有两个:
- 从 HTTPS 请求到 HTTP 网站的 Set-Cookie header returns。
- "Path" 属性未设置,因此它默认为 API URI 的路径(如 Tarun Lalwani 所解释)。
最终有效的语法是:
Set-Cookie: test=working; Domain=.domain.com; Path=/; Secure
我有一个使用 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
出现此问题的原因有两个:
- 从 HTTPS 请求到 HTTP 网站的 Set-Cookie header returns。
- "Path" 属性未设置,因此它默认为 API URI 的路径(如 Tarun Lalwani 所解释)。
最终有效的语法是:
Set-Cookie: test=working; Domain=.domain.com; Path=/; Secure