Подтвердить что ты не робот

Как получить cookie из ответа AJAX?

У меня есть запрос $.ajax в том же домене, и я хочу прочитать cookie. Он продолжает возвращать null.

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

Любые идеи? Я использую Chrome для этого.

4b9b3361

Ответ 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 "";
}