Wie funktionieren PHP-Sitzungen? (nicht "wie werden sie verwendet?")


127

Sitzungsdateien werden normalerweise beispielsweise /tmp/auf dem Server gespeichert und benannt sess_{session_id}. Ich habe mir die Inhalte angesehen und kann nicht herausfinden, wie sie wirklich funktionieren.

Das Abrufen des Variablennamens und des Inhalts aus der Datei ist einfach. Aber woher weiß PHP, welche Sitzung wem gehört?

Die session_id scheint völlig zufällig zu sein und eine IP-Adresse kann mehrere Benutzer haben, und jeder Benutzer kann mehrere Sitzungen haben, wenn mehr als ein Browserfenster geöffnet ist.

Wie funktioniert es?


Antworten:


202

In der allgemeinen Situation:

  • Die Sitzungs-ID wird an den Benutzer gesendet, wenn seine Sitzung erstellt wird.
  • es wird in einem Cookie gespeichert (standardmäßig aufgerufen PHPSESSID)
  • Dieses Cookie wird vom Browser bei jeder Anforderung an den Server gesendet
  • Der Server (PHP) verwendet dieses Cookie, das die Sitzungs-ID enthält, um zu wissen, welche Datei diesem Benutzer entspricht.

Die Daten in den Sitzungsdateien sind der Inhalt von $_SESSIONserialisiert (dh als Zeichenfolge dargestellt - mit einer Funktion wie serialize ) . und wird nicht serialisiert, wenn die Datei von PHP geladen wird, um das $_SESSIONArray zu füllen.


Manchmal wird die Sitzungs-ID nicht in einem Cookie gespeichert, sondern auch in URLs gesendet - aber das ist heutzutage ziemlich selten.


Weitere Informationen finden Sie im Abschnitt Sitzungsbehandlung des Handbuchs, der einige nützliche Informationen enthält.

Beispielsweise gibt es eine Seite zum Übergeben der Sitzungs-ID , auf der erläutert wird, wie die Sitzungs-ID mithilfe eines Cookies oder in URLs von Seite zu Seite übergeben wird - und welche Konfigurationsoptionen dies beeinflussen.


5
Wie behandelt ein mobiles Gerät (aus einer nativen App) Sitzungen normal? Sitzungs-ID speichern? Oder kommt OAuth hierher?
Adam Waite

13

Wie funktioniert die PHP-Sitzung?

  • Zunächst erstellt PHP a86b10aeb5cd56434f8691799b1d9360für eine einzelne Sitzung eine 16 Byte lange eindeutige Kennung (gespeichert als Zeichenfolge mit 32 Hexadezimalzeichen ).

  • Das PHPSESSID-Cookie übergibt diese eindeutige Identifikationsnummer an den Browser des Benutzers, um diese Nummer zu speichern.

  • Auf dem Server wird eine neue Datei mit dem gleichen Namen der eindeutigen Identifikationsnummer mit dem Präfix sess_ (dh sess_a86b10aeb5cd56434f8691799b1d9360) erstellt.

  • Der Browser sendet dieses Cookie bei jeder Anforderung an den Server.

  • Wenn PHP diese eindeutige Identifikationsnummer aus dem PHPSESSID-Cookie erhält (bei jeder Anforderung), sucht PHP im temporären Verzeichnis und vergleicht diese Nummer mit dem Dateinamen. Wenn beide gleich sind, wird die vorhandene Sitzung abgerufen, andernfalls wird eine neue Sitzung für diesen Benutzer erstellt.

Eine Sitzung wird zerstört, wenn der Benutzer den Browser schließt oder die Site verlässt. Der Server beendet die Sitzung auch nach Ablauf der festgelegten Sitzungszeit. Dies sind die einfachen Mechanismusschritte, mit denen PHP die Sitzung abwickelt. Ich hoffe, dieser Artikel hilft Ihnen zu verstehen, wie PHP SESSION funktioniert.

Weitere Informationen finden Sie in diesem Artikel. Wie funktioniert die PHP-Sitzung?


Wenn ich jedoch beispielsweise bei einer bestimmten Site (auch bekannt als: in einer Sitzung) angemeldet bin und einen neuen Tab öffne mysite.com/cart. Ich erhalte auch meine "Hallo Joe Doe, 5 Nachrichten, hier ist Ihre Einkaufswagenliste ...", auch bekannt als Sitzungsinformationen. - Aber warum sollte der Browser bezüglich dieser leeren Registerkarte eine Sitzungs-ID zusammen mit der GET-Anfrage senden? schnelles Update: Ah, fand die Antwort: +)
Frank Nocke

Kann ich fragen, wie die Sitzungs-ID Sicherheit bieten kann? Wenn sich der Benutzer beispielsweise angemeldet hat und zu seinem Profil gelangt, kann der Sitzungsparameter geändert werden, um auf das Profil eines anderen Benutzers zuzugreifen. Wie kann die Sitzungs-ID dies verhindern?
Andrewboy

4

Die Sitzungs-ID ist in der Tat zufällig und wird je nach Konfiguration in einem Cookie oder in der URL übergeben. Möglicherweise haben Sie diese PHPSESSID = xxxx bereits in einigen URLs gesehen. Es gibt auch ein Cookie mit diesem Namen.


2

Sitzungen in PHP werden mit der Funktion session_start () gestartet. Wie die Funktion setcookie () muss die Funktion session_start () vor jedem HTML-Code, einschließlich Leerzeilen, auf der Seite stehen. Es sieht folgendermaßen aus: <?php session_start( );?><html><head> ....... etc Die Funktion session_start () generiert eine zufällige Sitzungs-ID und speichert sie in einem Cookie auf dem Computer des Benutzers (dies ist die einzige Sitzungsinformation, die tatsächlich auf der Clientseite gespeichert ist. ) Der Standardname für das Cookie lautet PHPSESSID. Dies kann jedoch in den PHP-Konfigurationsdateien auf dem Server geändert werden (die meisten Hosting-Unternehmen lassen dies jedoch in Ruhe.) Um auf die Sitzungs-ID in Ihrem PHP-Code zu verweisen, verweisen Sie daher auf die Variable $ PHPSESSID (es ist ein Cookie-Name; erinnerst du dich daran von Cookies?)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.