Nach der Anmeldung über $.ajax()
zu einer Website, ich versuche, eine zweite $.ajax()
Aber wenn ich die mit FireBug gesendeten Header überprüfe, ist kein Sitzungscookie in der Anfrage enthalten.
Was mache ich falsch?
Nach der Anmeldung über $.ajax()
zu einer Website, ich versuche, eine zweite $.ajax()
Aber wenn ich die mit FireBug gesendeten Header überprüfe, ist kein Sitzungscookie in der Anfrage enthalten.
Was mache ich falsch?
Nachdem ich die anderen Lösungen ausprobiert hatte und es immer noch nicht klappte, fand ich heraus, was das Problem in meinem Fall war. Ich habe den ContentType von "application/json" auf "text/plain" geändert.
$.ajax(fullUrl, {
type: "GET",
contentType: "text/plain",
xhrFields: {
withCredentials: true
},
crossDomain: true
});
Ich hatte dasselbe Problem und habe einige Überprüfungen durchgeführt, weil mein Skript das Sessionid-Cookie einfach nicht erhalten hat.
Ich fand heraus, indem ich mir den Wert des sessionid-Cookies im Browser ansah, dass mein Framework (Django) das sessionid-Cookie standardmäßig mit HttpOnly übergab. Das bedeutete, dass Skripte keinen Zugriff auf den sessionid-Wert hatten und ihn daher nicht mit Anfragen weitergaben. Irgendwie lächerlich, dass HttpOnly der Standardwert sein würde, wenn so viele Dinge Ajax verwenden, die eine Zugriffsbeschränkung erfordern würden.
Um dies zu beheben, habe ich eine Einstellung geändert (SESSION_COOKIE_HTTPONLY=False), aber in anderen Fällen kann es sich um ein "HttpOnly"-Flag im Cookie-Pfad handeln
Wenn Sie die Entwicklung auf localhost
oder einen Port auf localhost wie localhost:8080
Zusätzlich zu den in den obigen Antworten beschriebenen Schritten müssen Sie auch sicherstellen, dass Sie im Set-Cookie-Header keinen Domänenwert übergeben.
Sie können die Domäne nicht auf localhost
im Set-Cookie-Header - das ist nicht korrekt - lassen Sie einfach die Domain weg.
Voir Cookies auf localhost mit expliziter Domain et Warum erstellt asp.net keine Cookies auf localhost?
Nur meine 2 Cents auf Einstellung PHPSESSID Cookie Problem, wenn auf localhost und unter dev-Umgebung. Ich mache den AJAX-Aufruf zu meinem REST-API-Endpunkt auf dem locahost. Sagen wir, die Adresse lautet mysite.localhost/api/member/login/
(virtueller Host in meiner Entwicklungsumgebung).
Wenn ich diese Anfrage auf Postbote geht alles gut und PHPSESSID wird mit der Antwort gesetzt.
Wenn ich diesen Endpunkt über AJAX von der Browsersync-Proxyseite anfordere (z. B. von 122.133.1.110:3000/test/api/login.php
in der Adresszeile meines Browsers sehen, dass die Domäne anders ist als mysite.localhost
) PHPSESSID erscheint nicht unter den Cookies.
Wenn ich diese Anfrage direkt von der Seite auf derselben Domäne stelle (d. h. mysite.localhost/test/api/login.php
) PHPSESSID ist richtig eingestellt.
Es handelt sich also um ein herkunftsübergreifendes Problem mit Cookies, wie von @flu erwähnt obige Antwort
Ich füge mein Szenario und meine Lösung hinzu, falls es jemand anderem hilft. Ich bin bei der Verwendung von RESTful APIs auf einen ähnlichen Fall gestoßen. Mein Webserver, auf dem HTML/Script/CSS-Dateien gehostet werden, und der Anwendungsserver, der die APIs bereitstellt, befanden sich auf derselben Domäne. Der Pfad war jedoch unterschiedlich.
Webserver - meineDomäne/ Internet-Seiten /abc.html
gebraucht abc.js die ein Cookie mit dem Namen mycookie
Anwendungsserver - mydomain/ webapis /Servicename.
welche Api-Aufrufe gemacht wurden
Ich habe das Cookie in mydomain/webapis/servicename erwartet und versucht, es zu lesen, aber es wurde nicht gesendet. Nachdem ich den Kommentar in der Antwort gelesen habe, habe ich im Entwicklungstool des Browsers überprüft, dass der Pfad von mycookie auf "/" gesetzt wurde Internet-Seiten " und daher nicht verfügbar im Dienstaufruf an
mydomain/ webapis /Servicename
Also während der Einstellung Cookie von Jquery, das ist, was ich tat -
$.cookie("mycookie","mayvalue",{**path:'/'**});
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.