使用AJAX设置跨域cookie

时间:2016-11-16 02:30:22

标签: javascript jquery asp.net ajax cookies

我们说我有域名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吗?

1 个答案:

答案 0 :(得分:0)

您需要进行2次更改。

在a.com上

正如@Jaromanda X在评论中指出的那样,您需要在withCredentials=true请求中设置$.get。除非您这样做,否则浏览器不允许设置跨域cookie。阅读此XMLHttpRequest.withCredentials

在b.com上

从服务器端设置cookie时,它将发送以下形式的标题:

  

set-cookie:key = val; expires =星期五,格林尼治标准时间20年1月24日10:29:58;路径= /; domain = example.com; HttpOnly; SameSite =松散

注意SameSite=Lax标志。 这可防止浏览器跨域设置Cookie。

  

Mozilla Set-Cookie docs

     

断言Cookie不能与跨域请求一起发送,   提供了一些针对跨站点请求伪造攻击的保护措施

您需要禁用此标志。这将取决于您的后端平台。我使用Django,对我来说,它只是更改1设置SESSION_COOKIE_SAMESITE这允许我将会话ID cookie设置为通过跨域AJAX请求进行设置。

完成这两项更改后,就会设置跨域Cookie。 但是,请确保进行足够的CORS和CSRF检查,以确保请求来自受信任的来源