Kann eine AJAX-Antwort ein Cookie setzen? Wenn nicht, was ist meine alternative Lösung? Soll ich es mit Javascript oder ähnlichem einstellen?
Kann eine AJAX-Antwort ein Cookie setzen? Wenn nicht, was ist meine alternative Lösung? Soll ich es mit Javascript oder ähnlichem einstellen?
Antworten:
Ja , Sie können Cookies in der AJAX-Anforderung im serverseitigen Code wie bei einer normalen Anforderung festlegen, da der Server nicht zwischen einer normalen Anforderung oder einer AJAX-Anforderung unterscheiden kann.
AJAX-Anforderungen sind nur eine spezielle Art der Anforderung an den Server. Der Server muss wie bei jeder HTTP-Anforderung antworten. In der Antwort auf die Anfrage können Sie Cookies hinzufügen.
If the user agent supports HTTP State Management it should persist, discard and send cookies (as received in the Set-Cookie response header, and sent in the Cookie header) as applicable.
- von w3.org/TR/XMLHttpRequest
Gemäß der w3-Spezifikation in Abschnitt 4.6.3 für XMLHttpRequest sollte ein Benutzeragent den Set-Cookie-Header berücksichtigen . Die Antwort lautet also: Ja, das sollten Sie können.
Zitat:
Wenn der Benutzeragent die HTTP-Statusverwaltung unterstützt, sollte er Cookies (wie im Set-Cookie-Antwortheader empfangen und im Cookie-Header gesendet) beibehalten, verwerfen und senden.
Beachten Sie, dass alle oben genannten Punkte (noch) nur dann zutreffen, wenn der AJAX-Aufruf in derselben Domäne erfolgt. Wenn Sie mit AJAX Cookies auf einer anderen Domain setzen möchten, öffnen Sie eine völlig andere Dose Würmer . Das Lesen domänenübergreifender Cookies funktioniert jedoch (oder zumindest der Server bedient sie; ob die UA Ihres Clients Ihrem Code den Zugriff auf sie ermöglicht, ist wiederum ein anderes Thema; ab 2014 ist dies der Fall).
withCredentials=true
für das xhr
Objekt festlegen. (2) Access-Control-Allow-Credentials
Sowohl in der OPTIONS-Preflight-Anforderung als auch in der tatsächlichen Anforderung festlegen. (3) Das Cookie nach Bedarf festlegen.
Stellen Sie außerdem sicher, dass Ihr Server keine sicheren Cookies für eine Nicht-http-Anforderung setzt. Ich habe gerade herausgefunden, dass meine Ajax-Anfrage eine PHP-Sitzung mit "sicherem" Set bekam. Da ich nicht auf https war, wurde das Sitzungscookie nicht zurückgesendet und meine Sitzung wurde bei jeder Ajax-Anforderung zurückgesetzt.