Как получить cookie из ответа AJAX?
У меня есть запрос $.ajax
в том же домене, и я хочу прочитать cookie. Он продолжает возвращать null
.
$.ajax({
type: 'GET',
url: myUrl,
success: function(output, status, xhr) {
alert(xhr.getResponseHeader("MyCookie"));
},
cache: false
});
Любые идеи? Я использую Chrome для этого.
Ответы
Ответ 1
Вы ищете заголовок ответа Set-Cookie
:
xhr.getResponseHeader('Set-Cookie');
Он не будет работать с cookie HTTPOnly, хотя.
Update
В соответствии с XMLHttpRequest Level 1 и XMLHttpRequest Level 2 эти конкретные заголовки ответов попадают под "запрещенных" заголовков ответов, которые вы можете получить с помощью getResponseHeader()
, поэтому единственная причина, по которой это может работать, - это, в основном, "озорной" браузер.
Ответ 2
браузер не может предоставить доступ к сторонним куки файлам, таким как те, которые получены из ajax-запросов по соображениям безопасности, однако, он заботится о них автоматически для вас!
Для этого вам необходимо:
1) войдите в систему с запросом ajax, из которого вы ожидаете, что файлы cookie будут возвращены:
$.ajax("https://example.com/v2/login", {
method: 'POST',
data: {login_id: user, password: password},
crossDomain: true,
success: login_success,
error: login_error
});
2) Соединитесь с xhrFields: { withCredentials: true }
в следующем запросе (ах) ajax, чтобы использовать учетные данные, сохраненные браузером
$.ajax("https://example.com/v2/whatever", {
method: 'GET',
xhrFields: { withCredentials: true },
crossDomain: true,
success: whatever_success,
error: whatever_error
});
Браузер берет на себя эти куки для вас, хотя они не читаются из headers
и document.cookie
Ответ 3
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
Ответ 4
Подобно yebmouxing, я не мог
xhr.getResponseHeader('Set-Cookie');
метод работы. Он вернет null, даже если я установил HTTPOnly на false на моем сервере.
Я тоже написал простую функцию js helper для захвата файлов 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 "";
}