跨域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的跨域请求与会话