Como faço para definir um cookie (header) com XMLHttpRequest em JavaScript?

Eu estou tentando definir um cookie em uma solicitação XSS usando XMLHttpRequest.

Eu encontrei a especificação XMLHttpRequest , e a seção 4.6.2-5 parece sugerir que a configuração Cookie, Cookie2 e alguns outros headers não são permitidos, mas eu esperava que houvesse uma solução alternativa.

Meu (jQuery) código está abaixo, mas a consulta resultante falha como o cookie não está definido.

$.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; } }); 

Isto pode ser feito. Você precisa do seguinte na chamada $ .ajax:

 xhrFields: { withCredentials: true } 

(Veja os documentos do jQuery), e você também precisará do site para o qual está fazendo a solicitação para suportar o CORS (eles precisarão pelo menos permitir sua origem e também configurar o header HTTP Access-Control-Allow-Credentials para true ).

Não há dúvida de que funciona. Você pode fazê-lo via HTTPS, com Basic Auth, etc. O jQuery enviará tudo (o header auth, cookies) se você informar (xhrFields) e o site fornecer os headers corretos do CORS. Não desista!

Por motivos de segurança, você não poderá modificar o header durante um XMLHTTPRequest.

Se você definir o cookie usando document.cookie, quando enviar a solicitação, o header do cookie includeá o cookie.

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

permite a origem e também para definir o header HTTP Access-Control-Allow-Credentials como true

Se o seu pedido no mesmo domínio que o código jquery, você pode usar o plugin jquery cookies