我有一个使用Web API的单页应用程序。当用户登录时,我希望服务器设置cookie以进一步识别。
AJAX请求显然是HTTP,只有一个小的标识头。据我所知,浏览器的代理不应区分XMLHttpRequest
和普通请求。特别是因为我使用的是相对较旧的firefox版本。
应用网址: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。 我正在使用实际的域和子域,而不是localhost。 使用相对较旧且稳定的Firefox版本。
答案 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)
由于两个原因,可能会出现问题:
最终工作的语法是:
Set-Cookie: test=working; Domain=.domain.com; Path=/; Secure