Ich arbeite in einem domänenübergreifenden Szenario. Während der Anmeldung gibt der Remote-Server den Set-Cookie-Header zusammen mit Access-Control-Allow-Credentials
set auf true zurück.
Der nächste Ajax-Aufruf an den Remote-Server sollte dieses Cookie verwenden.
CORS Access-Control-Allow-Credentials
ermöglicht die domänenübergreifende Protokollierung. Beispiele finden Sie unter https://developer.mozilla.org/En/HTTP_access_control .
Für mich scheint es ein Fehler in JQuery zu sein (oder zumindest eine zukünftige Funktion in der nächsten Version).
AKTUALISIEREN:
Cookies werden nicht automatisch aus der AJAX-Antwort gesetzt (Zitat: http://aleembawany.com/2006/11/14/anatomy-of-a-well-designed-ajax-login-experience/ )
Warum?
Sie können den Wert des Cookies nicht aus der Antwort abrufen, um ihn manuell festzulegen ( http://www.w3.org/TR/XMLHttpRequest/#dom-xmlhttprequest-getresponseheader ).
Ich bin verwirrt..
Es sollte eine Möglichkeit geben, jquery.ajax()
nach dem Einstellen von XMLHttpRequest.withCredentials = "true"
Parametern zu fragen .
ANTWORT:
Sie sollten den xhrFields
Parameter http://api.jquery.com/jQuery.ajax/ verwenden.
Das Beispiel in der Dokumentation lautet:
$.ajax({
url: a_cross_domain_url,
xhrFields: {
withCredentials: true
}
});
Es ist auch wichtig, dass der Server diese Anfrage korrekt beantwortet. Kopieren Sie hier tolle Kommentare von @ Frédéric und @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: *
Also, wenn die Anfrage lautet:
Origin: http://foo.example
Cookie: pageAccess=2
Der Server sollte antworten mit:
Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Credentials: true
[payload]
Andernfalls werden die Nutzdaten nicht an das Skript zurückgegeben. Siehe: https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials