Как мне установить Cookie (заголовок) с XMLHttpRequest в JavaScript? - PullRequest
27 голосов
/ 23 февраля 2010

Я пытаюсь установить Cookie в запросе XSS, используя XMLHttpRequest.

Я обнаружил XMLHttpRequest Specification , и в разделе 4.6.2-5, похоже, предполагается, что настройка Cookie, Cookie2 и некоторых других заголовков недопустима, но я надеялся, что есть обходной путь.

Мой (jQuery) код приведен ниже, но результирующий запрос не выполняется, поскольку cookie НЕ установлен.

$.ajax( {
  type : "POST",
  url : URL,
  data: SOAP_INBOX_MAIL_QUERY,
  dataType : "xml",
  async: false,
  beforeSend : function(xhr) {  
    var cookie = credentials["COOKIE"];
    console.info( "adding cookie: "+ cookie );          
    xhr.setRequestHeader('Cookie', cookie);
  },
  success : function(data, textStatus, xmLHttpRequest){


  },
  error : function(xhr, ajaxOptions, thrownError) {
    credentials = null;
  }
});

Ответы [ 5 ]

34 голосов
/ 16 декабря 2011

Это можно сделать. Для вызова $ .ajax необходимо следующее:

xhrFields: {
    withCredentials: true
}

. 1005 *).

Нет сомнений, это работает. Вы можете сделать это через HTTPS, с обычной аутентификацией и т. Д. JQuery отправит все (заголовок аутентификации, куки), если вы скажете это (xhrFields), и сайт предоставит правильные заголовки CORS. Не сдавайся!

14 голосов
/ 23 февраля 2010

По соображениям безопасности вы не сможете изменить заголовок во время запроса XMLHTTP.

3 голосов
/ 16 августа 2011

Если вы установили cookie с помощью document.cookie, то при отправке запроса заголовок cookie будет включать его.

1 голос
/ 16 февраля 2012

https://developer.mozilla.org/En/Server-Side_Access_Control

позволяет вам исходить, а также установить HTTP-заголовок Access-Control-Allow-Credentials в true

0 голосов
/ 23 февраля 2010

Если ваш запрос в том же домене, что и код jquery, вы можете использовать jquery плагин cookie

...