Color: php Script - Daten speichern für 30 min

Beitrag lesen

Löschen verwaister Sessiondateien
Wenn ein PHP-Script nicht über einen "Logout"-Mechanismus verfügt, oder es nie zu der Ausführung eines solchen Mechanismus kommt, weil ein imaginärer Benutzer den imaginären "Logout"-Button nicht gedrückt hat und man nicht mit session_destroy() reagieren kann, werden ältere und verwaiste Sessiondateien bei dem chronologisch nächsten Request bzw. Initialisierung der Session (session_start() resp. session_register()) gelöscht.

Die Initialisierung der Session setzt zuerst einen Prozeß in Gang, den man Garbage Collection (gc) nennt, und der dafür sorgt, dass alle verwaisten Sessiondateien aus dem Filesystem entfernt werden - erst danach wird ggf. eine neue Sessiondatei angelegt.

Um zu bestimmen, ob eine Sessiondatei verwaist ist, stellt PHP 4 den Konfigurationsparameter session.gc_maxlifetime in der php.ini bereit.

Der nummerische Wert von session.gc_maxlifetime gibt an, nach wievielen Sekunden eine Sessiondatei als Müll angesehen wird und entfernt werden darf (Default: 1440 Sekunden = 24 Minuten). Wenn die Differenz aus der Initialisierungszeit der Session (Jetzt-Zeit aus der Sicht des Scripes) und dem letzten Zugriff auf eine oder mehrere Sessiondateien den session.gc_maxlifetime-Wert übersteigt, werden diese Dateien gelöscht.

In der PHP 4-Defaulteinstellung wird die Garbage Collection statistisch jedoch nur bei jedem hundertsten session_start() angestoßen.

Verantwortlich hierfür ist der Konfigurationsparameter session.gc_probability. Dieser hat den Wert "1" und gibt die Wahrscheinlichkeit an, mit welcher die Müllsammlung gestartet wird, also in 1% der Fälle. Möchte man, dass ältere Sessiondateien zuverlässig gelöscht werden, so ist dieser Wert auf 100 (=100%) zu stellen.

Jede Garbage Collection benötigt natürlich auch ein wenig Zeit, sodaß man sich die Frage stellen sollte, ob es nicht ausreicht die Sessiondateien z.B. nur bei jeder zehnten Sessioninitialisierung (10%) löschen zu lassen.

Diese Parameter können in der php.ini, aber auch - wie viele andere Optionen - in den Webserverkonfigurationsdateien, der .htaccess-Datei oder direkt im Script beeinflußt werden.

Hier ein paar Beispiele für die verschiedenen Konfigurationsmöglichkeiten:

php.ini:

session.gc_maxlifetime = 600  ; 10 Minuten Lebenszeitsession.gc_probability = 50   ; 50% - ca. bei jedem                              ; zweiten Mal löschen
httpd.conf oder .htaccess oder verwandte Dateien:

Session lebt 30 Minutenphp_value  session.gc_maxlifetime  1800# Alte Session mit 100% Wahrscheinlicheit löschenphp_value  session.gc_probability  100

Direkt im Script:

<?php     // 20 Minuten Lebenszeit    ini_set("session.gc_maxlifetime", 1200);    // 100% Wahrscheinlichkeit    ini_set("session.gc_probability", 100);?>
Werden diese Parameter direkt im Script verändert, so muß dies vor dem ersten session_start() resp. session_register() ausgeführt werden, also bevor die Session initialisiert wird.