[英]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,即使它們無法從headers
或document.cookie
中讀取
您正在尋找Set-Cookie
的響應標頭:
xhr.getResponseHeader('Set-Cookie');
但它不適用於 HTTPOnly cookie。
根據XMLHttpRequest Level 1和XMLHttpRequest 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"));
},
類似於 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.