簡體   English   中英

如何從 AJAX 響應中獲取 cookie?

[英]How to get a cookie from an AJAX response?

我在同一個域上有一個$.ajax請求,我想讀取 cookie。 它不斷返回null

$.ajax({
    type: 'GET',
    url: myUrl,
    success: function(output, status, xhr) {
        alert(xhr.getResponseHeader("MyCookie"));
    },
    cache: false
});

有任何想法嗎? 我正在為此使用 Chrome。

出於安全原因,瀏覽器無法訪問來自 ajax 請求的第三方 cookie,它會自動為您處理這些 cookie!

為此,您需要:

1) 使用您希望從中返回 cookie 的 ajax 請求登錄:

$.ajax("https://example.com/v2/login", {
     method: 'POST',
     data: {login_id: user, password: password},
     crossDomain: true,
     success: login_success,
     error: login_error
  });

2) 在下一個 ajax 請求中連接xhrFields: { withCredentials: true }以使用瀏覽器保存的憑據

$.ajax("https://example.com/v2/whatever", {
     method: 'GET',
     xhrFields: { withCredentials: true },
     crossDomain: true,
     success: whatever_success,
     error: whatever_error
  });

瀏覽器會為您處理這些 cookie,即使它們無法從headersdocument.cookie中讀取

您正在尋找Set-Cookie的響應標頭:

xhr.getResponseHeader('Set-Cookie');

但它不適用於 HTTPOnly cookie。

更新

根據XMLHttpRequest Level 1XMLHttpRequest Level 2 ,這個特定的響應標頭屬於您可以使用getResponseHeader()獲得的“禁止”響應標頭,所以這可以工作的唯一原因基本上是一個“頑皮”的瀏覽器。

xhr.getResponseHeader('Set-Cookie');

它對我不起作用。

我用這個

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
    }
    return "";
} 

success: function(output, status, xhr) {
    alert(getCookie("MyCookie"));
},

http://www.w3schools.com/js/js_cookies.asp

類似於 yebmouxing 我不能

 xhr.getResponseHeader('Set-Cookie');

工作方法。 即使我在服務器上將 HTTPOnly 設置為 false,它也只會返回 null。

我也編寫了一個簡單的 js 輔助函數來從文檔中獲取 cookie。 此功能非常基本,只有在您知道要添加自己的附加信息(壽命、域、路徑等)時才有效:

function getCookie(cookieName){
  var cookieArray = document.cookie.split(';');
  for(var i=0; i<cookieArray.length; i++){
    var cookie = cookieArray[i];
    while (cookie.charAt(0)==' '){
      cookie = cookie.substring(1);
    }
    cookieHalves = cookie.split('=');
    if(cookieHalves[0]== cookieName){
      return cookieHalves[1];
    }
  }
  return "";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM