我们说我有域名a.com和b.com,我拥有这两个域名。 b.com上有一个名为setcookie.aspx的页面,在服务器代码中,它在b.com域下设置了一个cookie。
我想从a.com向b.com/setcookie.aspx发出HTTP get请求(b.com已经允许来自a.com的CORS请求),如下所示:
。$得到(' http://www.b.com/setcookie.aspx&#39);
由于某种原因,cookie未被设置。但是,如果我将URL放在隐藏的图像标记中:
< img src =" http://www.b.com/setcookie.aspx" style =" display:none;" />
然后它有效。知道为什么AJAX请求没有设置cookie吗?
答案 0 :(得分:0)
您需要进行2次更改。
正如@Jaromanda X在评论中指出的那样,您需要在withCredentials=true
请求中设置$.get
。除非您这样做,否则浏览器不允许设置跨域cookie。阅读此XMLHttpRequest.withCredentials
从服务器端设置cookie时,它将发送以下形式的标题:
set-cookie:key = val; expires =星期五,格林尼治标准时间20年1月24日10:29:58;路径= /; domain = example.com; HttpOnly; SameSite =松散
注意SameSite=Lax
标志。 这可防止浏览器跨域设置Cookie。
断言Cookie不能与跨域请求一起发送, 提供了一些针对跨站点请求伪造攻击的保护措施
您需要禁用此标志。这将取决于您的后端平台。我使用Django,对我来说,它只是更改1设置SESSION_COOKIE_SAMESITE。 这允许我将会话ID cookie设置为通过跨域AJAX请求进行设置。
完成这两项更改后,就会设置跨域Cookie。 但是,请确保进行足够的CORS和CSRF检查,以确保请求来自受信任的来源。