跨域POST请求不发送Cookie Ajax Jquery

似乎已经在stackoverflow上讨论过类似的东西,但我找不到完全一样的东西。

我试图发送CORS(跨源资源共享)的Cookie,但它不工作。

这是我的代码。

$.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); } } ); 

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

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

请注意,这并不能解决cookie共享过程,因为一般来说这是不好的做法。

你需要使用JSONP作为你的types:

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

 $.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。

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

我在这个问题上挣扎很多,周围没有太多好的答案。 这里有一个详细的解决scheme的文章: JavaScript的跨域请求与会话