webentwicklung-frage-antwort-db.com.de

Behalten AJAX Anforderungen PHP Sitzungsinformationen?

Wenn ich einen Benutzer auf meiner Site angemeldet hätte, dessen ID in $_SESSION Gespeichert wäre, und er in seinem Browser auf die Schaltfläche "Speichern" geklickt hätte, um eine AJAX) - Anfrage an die zu senden Server. Werden sein $_SESSION und seine Cookies in dieser Anfrage beibehalten, und kann ich mich sicher darauf verlassen, dass die ID im $_SESSION vorhanden ist?

149
Click Upvote

Die Antwort ist ja:

Sitzungen werden serverseitig verwaltet. Für den Server besteht kein Unterschied zwischen einer AJAX) - Anforderung und einer regulären Seitenanforderung. Beide sind HTTP-Anforderungen und enthalten in gleicher Weise Cookie-Informationen im Header .

Auf der Client-Seite werden immer dieselben Cookies an den Server gesendet, egal ob es sich um eine reguläre Anfrage oder eine AJAX Anfrage handelt. Der Javascript-Code muss nichts Besonderes tun oder sich dessen bewusst sein In diesem Fall funktioniert es genauso wie bei regulären Anfragen.

185
thomasrutter

Wenn die PHP Datei die AJAX Anforderungen eine session_start() hat, werden die Sitzungsinformationen beibehalten (die Anforderungen befinden sich jedoch innerhalb derselben Domäne) )

23
Ólafur Waage

Was Sie wirklich verstehen, ist: Werden Cookies mit der Anforderung AJAX gesendet? Angenommen, die AJAX -Anforderung bezieht sich auf dieselbe Domain (oder innerhalb der Domain-Einschränkungen des Cookies), lautet die Antwort "Ja". Daher behalten AJAX Anfragen an denselben Server dieselben Sitzungsinformationen bei (vorausgesetzt, die aufgerufenen Skripte geben einen session_start () aus, wie bei jedem anderen PHP Skript, das Zugriff auf Sitzungsinformationen haben möchte).

23
cletus

Nun, nicht immer. Mit Cookies sind Sie gut. Aber das "kann ich mich sicher darauf verlassen, dass die ID vorhanden ist" hat mich aufgefordert, die Diskussion um einen wichtigen Punkt zu erweitern (hauptsächlich als Referenz, da die Besucherzahl dieser Seite ziemlich hoch zu sein scheint).

PHP kann so konfiguriert werden, dass Sitzungen durch Umschreiben von URLs anstelle von Cookies beibehalten werden. ( Wie es gut oder schlecht ist (<- siehe z. B. den obersten Kommentar dort) ist eine separate Frage , bleiben wir jetzt bei der aktuellen, mit nur Eine Randnotiz: Das auffälligste Problem bei URL-basierten Sitzungen - die offensichtliche Sichtbarkeit der nackten Sitzungs-ID - ist kein Problem bei internen Ajax-Aufrufen, aber wenn es für Ajax aktiviert ist, ist es für das aktiviert Rest der Seite auch, also da ...)

Bei Sitzungen ohne URL-Umschreibung (cookieless) müssen Ajax-Aufrufe selbst dafür sorgen , dass ihre Anforderungs-URLs ordnungsgemäß erstellt werden. (Oder Sie können Ihre eigene benutzerdefinierte Lösung entwickeln. Sie können sogar auf die Verwaltung von Sitzungen zurückgreifen auf der Clientseite , in weniger anspruchsvollen Fällen.) Der Punkt ist die explizite Pflege Wird für die Sitzungskontinuität benötigt, wenn keine Cookies verwendet werden:

  1. Wenn der Ajax nur extrahieren URLs aus dem HTML-Code aufruft (wie von PHP empfangen), sollte dies in Ordnung sein, da diese bereits gekocht sind (umm, gekocht).

  2. Wenn sie assemblieren URIs selbst anfordern müssen, muss die Sitzungs-ID manuell zur URL hinzugefügt werden. (Überprüfen Sie hier oder die von PHP ( mit aktivierter URL-Umschreibung ) generierten Seitenquellen, um zu sehen, wie es gemacht wird.)


Von OWASP.org :

Die Webanwendung kann effektiv beide Mechanismen, Cookies oder URL-Parameter verwenden oder sogar von einem zum anderen wechseln (automatisches Umschreiben von URLs), wenn bestimmte Bedingungen erfüllt sind (z. B. das Vorhandensein von Webclients ohne Unterstützung von Cookies oder wenn Cookies aus Datenschutzgründen nicht akzeptiert werden).

Aus einem Ruby-Forum Beitrag:

Wenn Sie PHP mit Cookies verwenden, wird die Sitzungs-ID auch für Ajax XMLHttpRequests automatisch in den Anforderungs-Headern gesendet. Wenn Sie URL-basierte PHP-Sitzungen verwenden oder zulassen, müssen Sie die Sitzungs-ID jeder Ajax-Anforderungs-URL hinzufügen.

8
Sz.

Es ist sehr wichtig, dass AJAX Anfragen die Sitzung behalten. Das einfachste Beispiel ist, wenn Sie versuchen, eine AJAX Anfrage für das Admin-Panel zu machen, sagen wir. Natürlich dass Sie die Seite, auf die Sie die Anfrage stellen, schützen und nicht für andere zugänglich machen, die nicht über die Sitzung verfügen, die Sie nach dem Anmelden des Administrators erhalten.

Beachten Sie jedoch, dass insbesondere bei Verwendung eines Frameworks überprüft werden muss, ob die Anwendung Sitzungs-IDs zwischen Anforderungen neu generiert. Bei allen Vorgängen, die explizit von der Sitzungs-ID abhängen, treten Probleme auf, auch wenn der Rest der Daten offensichtlich im System vorhanden ist Die Sitzung bleibt davon unberührt.

Wenn die Anwendung Sitzungs-IDs wie diese neu generiert, kann dies dazu führen, dass eine Ajax-Anforderung die Sitzungs-ID auf der anfordernden Seite ungültig macht/ersetzt.

0
John

geben Sie Ihre session () auth auf allen serverseitigen Seiten ein, die eine Ajax-Anfrage akzeptieren:

if(require_once("auth.php")) {

//run json code

}

// do nothing otherwise

das ist ungefähr die einzige Art und Weise, wie ich es jemals getan habe.

0
brianabee7

Das ist es, was Frameworks tun, z. Wenn Sie eine Sitzung in Front Controller oder einem Boostrap-Skript initialisieren, müssen Sie sich weder für Seitencontroller noch für Ajax-Controller um die Initialisierung kümmern. PHP Frameworks sind kein Allheilmittel, aber sie machen so viele nützliche Dinge wie diese!

0
AlexA