跨域 POST 请求没有发送 Cookie Ajax Jquery

似乎类似的东西已经讨论了堆栈溢出,但我找不到完全一样。

我试着把 Cookie 和 CORS (跨来源资源共享)一起发送,但是不起作用。

这是我的原则。

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

112813 次浏览

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

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

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

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

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

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

我在这个问题上挣扎了很久,周围没有多少好的答案。下面是一篇详细介绍解决方案的文章: 带会话的跨域请求

这个领域最近发生了很多变化,所以我认为一个新的答案会有所帮助。

要让浏览器在请求期间将 Cookie 发送到另一个站点,必须满足以下条件:

很多人在这篇文章中试图针对远程端点进行本地开发,如果满足上述标准,这是可能的。