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。
请注意,这并不能解决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跨域请求