J'opère dans un scénario interdomaine. Lors de la connexion, le serveur distant renvoie l'en-tête Set-Cookie avec Access-Control-Allow-Credentials
la valeur true.
Le prochain appel ajax au serveur distant doit utiliser ce cookie.
CORS Access-Control-Allow-Credentials
est là pour permettre la journalisation inter-domaines. Consultez https://developer.mozilla.org/En/HTTP_access_control pour des exemples.
Pour moi, cela ressemble à un bug dans JQuery (ou au moins une fonctionnalité à venir dans la prochaine version).
METTRE À JOUR:
Les cookies ne sont pas définis automatiquement à partir de la réponse AJAX (citation: http://aleembawany.com/2006/11/14/anatomy-of-a-well-designed-ajax-login-experience/ )
Pourquoi?
Vous ne pouvez pas obtenir la valeur du cookie à partir de la réponse pour le définir manuellement ( http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-getresponseheader )
Je suis confus..
Il devrait exister un moyen de demander jquery.ajax()
de définir le XMLHttpRequest.withCredentials = "true"
paramètre.
RÉPONSE:
Vous devez utiliser xhrFields
param de http://api.jquery.com/jQuery.ajax/
L'exemple dans la documentation est:
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
Il est également important que le serveur réponde correctement à cette demande. Copiant ici les excellents commentaires de @ Frédéric et @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: *
Donc, lorsque la demande est:
Origin: http://foo.example
Cookie: pageAccess=2
Le serveur doit répondre avec:
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true
[payload]
Sinon, la charge utile ne sera pas retournée au script. Voir: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials