Estou operando no cenário entre domínios. Durante o login, o servidor remoto está retornando o cabeçalho Set-Cookie junto com Access-Control-Allow-Credentials
set como true.
A próxima chamada ajax para o servidor remoto deve usar esse cookie.
Os CORS Access-Control-Allow-Credentials
estão lá para permitir o registro entre domínios. Verifique https://developer.mozilla.org/En/HTTP_access_control para obter exemplos.
Para mim, parece um bug no JQuery (ou pelo menos um recurso na próxima versão).
ATUALIZAR:
Os cookies não são definidos automaticamente a partir da resposta AJAX (citação: http://aleembawany.com/2006/11/14/anatomy-of-a-well-designed-ajax-login-experience/ )
Por quê?
Você não pode obter o valor do cookie da resposta para defini-lo manualmente ( http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-getresponseheader )
Estou confuso..
Deve haver uma maneira de pedir jquery.ajax()
para definir o XMLHttpRequest.withCredentials = "true"
parâmetro.
RESPOSTA:
Você deve usar o xhrFields
parâmetro http://api.jquery.com/jQuery.ajax/
O exemplo na documentação é:
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
Também é importante que o servidor responda corretamente a essa solicitação. Copiando aqui ótimos comentários de @ Frédéric e @Pebbl:
Important note: when responding to a credentialed request, server must specify a domain, and cannot use wild carding. The above example would fail if the header was wildcarded as: Access-Control-Allow-Origin: *
Então, quando a solicitação é:
Origin: http://foo.example
Cookie: pageAccess=2
O servidor deve responder com:
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true
[payload]
Caso contrário, a carga útil não será retornada ao script. Consulte: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials