Set-Cookie(来自AJAX)标题未在浏览器

时间:2018-05-16 07:20:23

标签: ajax http cookies setcookie

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

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

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

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

enter image description here

如您所见,浏览器的请求解析器可以识别cookie。即使在挖掘了所有SO和Google之后,我还没有找到一个合理的解释,说明为什么这不是设置cookie。

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

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

2 个答案:

答案 0 :(得分:2)

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

How does a browser handle cookie with no path and no domain

对于没有路径属性的Set-Cookie,RFC6265声明:

  

如果服务器省略了Path属性,则用户代理将使用request-uri的路径组件的“目录”作为默认值。

因此,您需要在服务器上设置path=/以确保所有人都可以访问Cookie

修改-1

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

就无法读取

答案 1 :(得分:0)

由于两个原因,可能会出现问题:

  1. Set-Cookie标头从HTTPS请求返回到HTTP网站。
  2. 未设置“路径”属性,因此默认为API URI的路径(如Tarun Lalwani所述)。
  3. 最终工作的语法是:

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