关于javascript:跨域POST请求不发送cookie Ajax Jquery

Cross domain POST request is not sending cookie Ajax Jquery

似乎已经在stackoverflow上讨论了类似的东西,但我找不到完全相同的东西。

我正在尝试使用CORS(跨源资源共享)发送Cookie,但它无法正常工作。

这是我的代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$.ajax(
    {
      type:"POST",
      url:"http://example.com/api/getlist.json",
      dataType: 'json',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie","session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);

我没有在请求HEADER中看到这个cookie。


您无法通过JavaScript在CORS请求上设置或读取Cookie。虽然CORS允许跨源请求,但cookie仍然受浏览器的同源策略的约束,这意味着只有来自同一来源的页面才能读/写cookie。 withCredentials仅表示远程主机设置的任何cookie都将发送到该远程主机。您必须使用Set-Cookie标头从远程服务器设置cookie。


请注意,这并不能解决cookie共享过程,因为通常这是不好的做法。

您需要使用JSONP作为您的类型:

来自$ .ajax文档:
跨域请求和dataType:"jsonp"请求不支持同步操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$.ajax(
    {
      type:"POST",
      url:"http://example.com/api/getlist.json",
      dataType: 'jsonp',
      xhrFields: {
           withCredentials: true
      },
      crossDomain: true,
      beforeSend: function(xhr) {
            xhr.setRequestHeader("Cookie","session=xxxyyyzzz");
      },
      success: function(){
           alert('success');
      },
      error: function (xhr) {
             alert(xhr.responseText);
      }
    }
);


我有同样的问题。会话ID在cookie中发送,但由于请求是跨域的,因此浏览器的安全设置将阻止cookie被发送。

解决方案:在客户端(在浏览器中)生成会话ID,使用Javascript sessionStorage存储会话ID,然后将每个请求的会话ID发送到服务器。

我在这个问题上遇到了很多困难,周围的答案并不多。这是一篇详细介绍解决方案的文章:带有Session的Javascript跨域请求