Damit der Vorgang der Sessionspeicherung ein wenig verdeutlicht wird, untersuchen wir die Veränderungen im Filesystem des Servers. Die folgenden Beispiele laufen auf einem Unix-/Linuxsystem. Um sie nachvollziehen zu können, muß PHP mit safe_mode=Off konfiguriert werden. Zusätzlich wird davon ausgegangen, daß der Client (Browser) Cookies akzeptiert.
Als allererstes braucht man ein Script, welches den Inhalt des im session.save_path festgelegten Directories anzeigen kann:
<?php   // Datei: list.dir.php   // Liste das "session.save_path" Directory   // "safe_mode" muß "Off" sein   if (strtolower(session_module_name()) == "files") {     echo '<pre>';     system('ls -l ' . get_cfg_var('session.save_path'));     echo '</pre>';   } ?>
Dieses Script wird unter dem Namen list.dir.php gespeichert. Hat man z.B. Shell-Zugriff auf den benötigten Teil des Servers, führt natürlich auch ein einfaches ls /tmp -l zu der von list.dir.php produzierten Ausgabe.
Das obige Script wird ausgeführt, um den Ursprungszustand des im session.save_path gespeicherten Verzeichnisses zu betrachten. Zunächst produziert das Script folgendes:
insgesamt 0 srwxrwxrwx 1 root root 0 Sep 22 21:38 mysql.sock
Das Verzeichnis (in diesem Fall /tmp) ist fast leer. Die Datei mysql.sock kann für unseren Zweck vernachlässigt werden.
Als nächstes schreibt man ein Script, welches nach und nach ergänzt oder verändert wird, um die Veränderungen im Filesystem zu beobachten. Der Name diese Scriptes sei session.php. Dieses Script enthält nur die Funktion session_start(). Nach dem Start beobachten wir die Veränderungen:
<?php   // Datei: session.php   @session_start(); ?>
insgesamt 0 srwxrwxrwx 1 root root 0 Sep 22 21:38 mysql.sock -rw------- 1 wwwrun www 0 Apr 17 18:00 sess_edb0e8665db4...
Wie man sehen kann, hat PHP eine Sessiondatei mit den Zugriffsrechten des Webservers erzeugt, dessen Prozeß es ja ist. Diese Datei ist zunächst 0 (Null) Byte groß. Diese Datei wird gleich die Sessiondaten aufnehmen.
Als nächstes wird das Script um die session_register() Funktion erweitert, die festlegt, daß die Variablen $s_userName und $s_userPermissions und ihre Inhalte gespeichert werden sollen. Bei den Parametern der session_register() Funktion handelt es sich nicht um die Variablen selbst, sondern um ihre Namen. Diese Parameter besitzen kein führendenes “$”.
<?php   // Datei: session.php   @session_start();   session_register('s_userName', 's_userPermissions');   $s_userName        = 'dtg';   $s_userPermissions = 'keine :=('; ?>
insgesamt 4 srwxrwxrwx 1 root root 0 Sep 22 21:38 mysql.sock -rw------- 1 wwwrun www 55 Apr 17 18:01 sess_edb0e8665db4...
Die Sessiondatei ist nun auf 55 Byte angewachsen. Sie enthält folgenden String:
s_userName|s:3:"dtg";s_userPermissions|s:9:"keine :=(";
also die serialisierten Namen und Inhalte der Variablen, die mit session_register() bestimmt wurden. In den Sessiondaten können verschiedene Variablentypen gespeichert werden, also auch Arrays und Objekte.
Wenn man jetzt auf eine Variable in der Sessiondatei verzichten will, kann man mittels session_unregister() PHP davon abhalten, die betreffende Variable zu speichern:
<?php   // Datei: session.php   @session_start();   session_unregister('s_userPermissions');   $s_userPermissions = 'ich will nicht gespeichert werden'; ?>
insgesamt 4 srwxrwxrwx 1 root root 0 Sep 22 21:38 mysql.sock -rw------- 1 wwwrun www 21 Apr 17 18:02 sess_edb0e8665db4...
Die Variable $s_userPermissions wurde verworfen, die Sessiondatei ist nur noch 21 Byte groß und enthält nur noch die Variable $s_userName:
s_userName|s:3:"dtg";
Möchte man nun alle Sessiondaten löschen stellt PHP die Funktion session_destroy() zur Verfügung. Vor einem session_destroy() muß zwingend ein session_start() oder session_register() ausgeführt werden:
<?php   // Datei: session.php   @session_start();   session_destroy(); ?>
insgesamt 0 srwxrwxrwx 1 root root 0 Sep 22 21:38 mysql.sock
Die Sessiondatei wurde gelöscht und die Sessionvariablen stehen für weitere Scripte nicht mehr zur Verfügung. Wird nach diesem Zeitpunkt nochmals die Funktion session_start() bzw. session_register() im gleichen Browserfenster aufgerufen, wird erneut eine (leere) Sessiondatei erzeugt, und zwar exakt mit dem gleichen Namen d.h. mit der gleichen Session-ID. Der Grund dafür ist, daß der vom Browser gespeicherte Cookie – der ja die Session-ID enthält – erneut bei einem Request an den Server übermittelt wird.