Was ist eine Session-ID? Wo werden Sessiondaten gespeichert?

in PHP Tutorials

Die Session-ID – es ist eine zufällige Zeichenfolge – wird serverseitig generiert und wird beim allerersten Response des Webservers an den Browser geschickt, der sie dann speichert. Üblicherweise wird eine Session-ID in Cookies abgelegt, da der Browser bei jedem Request automatisch den Inhalt des Cookies an den Webserver schickt der ihn gesetzt hat.

Dies bedeutet, dass sich der Programmierer der serverseitigen Software theoretisch keine Sorgen machen muss, wie die Session-ID vom Browser wieder zurück zum Webserver kommt, da diese Arbeit automatisch vom Browser erledigt wird.

Cookies sind nichts anderes als menschenlesbare Textdateien, in denen ein Webserver spezifische Daten auf der lokalen Platte des Benutzers ablegen kann. Diese Daten sind u.U. recht kryptisch gehalten, so daß meistens nur der Autor der serverseitigen Software – die den Cookie gesetzt hat – weiß, wie diese Cookie-Daten zu interpretieren sind.

Dies ist aber für uns irrelevant und soll uns nicht weiter beschäftigen, denn wir wollen feststellen, daß die Größe des Cookie – per Definition – ca. 4000 Zeichen nicht überschreiten darf (wovon wir ca. 40 Zeichen benötigen), und dass es zwei Arten von Cookies gibt:

  • “Persistente Cookies” werden für einen definierten Zeitraum (Gültigkeitsdauer) auf der Festplatte des Benutzers als normal lesbare Textdatei gespeichert. Dieser Zeitraum kann sich von wenigen Minuten bis mehreren Jahren erstrecken.
  • Die Lebensdauer der “temporären Session-Cookies” beschränkt sich auf die Lebensdauer des Browser-Fensters. Wird dieses geschlossen, wird auch der temporäre Cookie verworfen. Dieser Cookie wird üblicherweise nicht auf der Festplatte gespeichert; er residiert im Arbeitsspeicher des Rechners.

In der Standardeinstellung benutzt PHP 4 die zweite Variante – die temporären Cookies – um Session-IDs zu speichern. Im Cookie wird der Name der Session und die bereits erwähnte zufällige Zeichenfolge der Session-ID gespeichert. Der Name der Session ist eine frei wählbare Bezeichnung, die uns später als Variable bei der Auswertung der Sessiondaten im PHP-Script zu Verfügung stehen wird. Per Voreinstellung lautet der Name der Variable bei PHP 4: PHPSESSID. Die Länge der von PHP 4 produzierten Session-ID beträgt 32 Zeichen.

Als Ergebnis können wir annehmen, dass bei der Initialisierung einer Session, PHP einen Cookie mit etwa dem folgenden Inhalt beim Benutzer hinterlegt:

PHPSESSID=edb0e8665db4e9042fe0176a89aade16

Der linke Teil des Strings wird als Sessionname und der rechte – die zufällige Zeichenkette “edb0e8665db4e9042fe0176a89aade16″ – als Session-ID bezeichnet.

Diese Session-ID ist der Schlüssel zur Wiedererkennung des Benutzers und zur Restaurierung der von ihm gesetzten Daten. Die Session-ID repräsentiert bei PHP 4 – per Voreinstellung – eine temporäre Datei im Filesystem des Servers. Auf unixoiden Betriebssystemen wird die PHP-Sessiondatei standardmäßig im Verzeichnis /tmp/ erstellt. In der php.ini – der globalen Konfigurationsdatei – oder ein der Webserverkonfiguration läßt sich dieser Wert natürlich verändern.

Diese Session-Datei bekommt im Namen den Prefix sess_, so dass das Ergebnis im Filesystem des Servers folgendermaßen aussehen kann:

goosh@warpcore:~> ls /tmp/ -l
insgesamt 0
-rw------- 1 wwwrun www 0 Apr 17 18:00 sess_edb0e8665db4...

In dieser Datei kann ein PHP-Script Benutzerdaten ablegen – z.B. die Artikelnummer und die Anzahl der bestellten Artikel für einen Warenkorb oder einfach nur ob ein Benutzer sich authorisiert hat und Zugriff auf eine Webseite hat.

Dadurch dass der Browser den Inhalt des Cookies bei einem Request mitschickt, ist es möglich den Benutzer über mehrere Webseiten zu authentifizieren oder die vom Benutzer gesetzten Variablen von einer Seite auf eine andere zu übernehmen.

Die Manipulation dieser Session-Datei bleibt nur dem serverseitig ausgeführtem PHP-Script vorbehalten. Der Client weiß nicht welche Daten von dem Script gespeichert werden und er kann keinen mittelbaren Einfluß auf diese Daten nehmen. Ausnahme bildet hier die Änderung oder Löschung dieser Daten durch den Administrator oder durch ein auf dem Server laufendes Script mit entsprechenden (Datei-)Rechten.


Merke:

  • In der Voreinstellung benutzt PHP 4 temporäre Cookies um Session-IDs zu speichern.
  • Defaultname der Session ist PHPSESSID.
  • Eine mit PHP 4 generierte Session-ID ist 32 Zeichen lang (MD5 digest).
  • Sessiondateien werden im Ordner /tmp/ gespeichert.
  • Sessiondateien können nur serverseitig geändert werden.

Leave a Comment

Seite zurück: Sessions mit PHP

Seite vor: Die wichtigsten Session-Funktionen