繁体   English   中英

跨域POST请求不发送cookie Ajax Jquery

[英]Cross domain POST request is not sending 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);
      }
    }
);

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

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

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

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

来自 $.ajax 文档:跨域请求和数据类型:“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);
      }
    }
);

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

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

很多人找到了这篇文章的方法,试图针对远程端点进行本地开发,如果满足上述条件,这是可能的。

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

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

我在这个问题上挣扎了很多,周围没有很多好的答案。 这是一篇详细介绍解决方案的文章: Javascript Cross-Domain Request With Session

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM