假设我有域a.com和b.com,而且我拥有这两个域。b.com上有一个名为setcookie.aspx的页面,在服务器代码中,它在b.com域中设置了一个cookie。
我想从a.com (b.com已经允许来自a.com的CORS请求)向b.com/setcookie.aspx ie.aspx发出HTTP请求,如下所示:
$.get('http://www.b.com/setcookie.aspx');
由于某些原因,cookie没有被设置。但是,如果我将URL放在隐藏的图像标记中:
那就成功了。知道AJAX请求为什么不设置cookie吗?
发布于 2019-12-25 13:36:28
你需要做两个改变。
论a.com
正如@Jaromanda X在评论中指出的那样,您需要在您的$.get请求中设置$.get。除非您这样做,否则浏览器不允许设置跨域cookie。读这个XMLHttpRequest.withCredentials
论b.com
当要从服务器端设置cookie时,它将发送表单的标题:
set-cookie: key=val;expires=Fri,24-1月20日10:29:58 GMT;path=/;domain=example.com;HttpOnly;SameSite=Lax
注意SameSite=Lax标志。--这可以防止浏览器跨域设置cookie。
来自Mozilla套装-Cookie博士 声明不能将cookie与跨源请求一起发送,从而提供了一些防止跨站点请求伪造攻击的保护措施。
你需要禁用这个标志。这将取决于您的后端平台。我使用Django,对我来说,它只是改变了1设置萨梅塞特。,这允许我通过跨域AJAX请求.设置会话id cookie。
一旦您做了这两个更改,跨域cookie将被设置。但是,要确保有足够的CORS和CSRF检查,以确保请求来自受信任的源。
https://stackoverflow.com/questions/40623111
复制相似问题