簡體   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