Ich habe eine Seite in domain.com
, die eine JSONP-Ajax-Anfrage (mit jQuerys .getJSON()
-Funktion) zu einer URL in anotherdomain.com
macht. Ich dachte (gelesen: angenommen), dass die Ressource in anotherdomain.com
Server-seitigen Zugriff auf alle Cookies in dieser Domäne haben würde, aber das scheint nicht der Fall zu sein?
Der Ajax-Aufruf wird speziell ausgeführt, um auf ein bestimmtes Cookie zuzugreifen, einige Datenmanipulationen durchzuführen und einen umfangreichen Satz von Informationen zurückzugeben, die durch den Cookie-Wert verschlüsselt werden. Die ursprüngliche Domäne hat keinen direkten Zugriff auf den Cookie-Wert. Daher dachte ich, dass eine Ajax-Anforderung den benötigten Zustand beibehalten würde.
Welche wichtige Information über Cookies übersehe ich? Ich bin erschöpft und ich sehe es einfach nicht.
Danke.
AKTUALISIEREN
Ich habe einen Weg gefunden, es zu tun, aber es sieht für mein Auge wie JSONP aus, also frage ich mich, warum dieser Weg funktioniert, während die Ajax-Version nicht funktioniert. Wird die Anfrage gerade von der Browser-Sitzung getrennt, so dass keine Cookies verfügbar sind?
%Vor% Für alle AJAX-Anfragen gilt die gleiche Ursprungsrichtlinie , wenn die Domäne, auf die in einem AJAX-Aufruf zugegriffen wird, anders ist als Wenn die Domain im Browser geladen ist (document.host), werden alle Cookies, die mit der Domain in der angeforderten URL verknüpft sind, nicht gesendet. Daher funktioniert der JSONP-Ansatz, weil er ein neues Skript-Tag im Fenster ausgibt, das sich wie jede Ressourcenanforderung verhält, die ein Browser an eine externe Domäne stellen kann (und somit alle Cookies, die mit der Domäne in der URL verknüpft sind). Ich habe das auch bestätigt, indem ich einfach $.post("http://atdmt.com")
von meiner Chrome-Konsole aus anrufe, während ich auf stackoverflow.com im Browser (der einzigen anderen Domain, die Cookies in meinem Browser hatte, während ich die Antwort schrieb) und keine Cookies gesendet habe in den Anforderungsheadern.
Eine weitere Lösung für das Problem, den Status für anotherdomain.com beizubehalten, wäre, dass anotherdomain.com einen Erstanbieter-Cookie setzt (indem Sie das Domänenattribut nicht festlegen) des Cookies) und wenn eine ajax / json-Anfrage an anotherdomain.com gestellt wird, greifen Sie über JavaScript auf diese Cookies zu und drücken Sie die Anfrage mit den Standard-HTTP-Parametern.
Ich hoffe, ich habe geholfen.
Ich habe das gleiche Problem schon einmal gesehen. Das Problem, das ich festgestellt habe, ist, dass die meisten Browser es nicht erlauben, eine Sitzung zu gründen (d. H. Einen Sitzungscookie zu setzen), wenn die gleiche Ursprungsrichtlinie nicht eingehalten wird.