Sessions in PHP - Garbage Collection
Autor
Flitze
Klicks 207315
Keywords:
PHP Session Tutorial, Probleme mit PHP Sessions, $_SESSION, Sessions, PHP, Garbage Collection, Müll entsorgen
Klicks 207315
Rating für Sessions in PHP
8.7 von 10
Bewertungen135
Stand
12.06.2013
8.7 von 10
Bewertungen135
Keywords:
PHP Session Tutorial, Probleme mit PHP Sessions, $_SESSION, Sessions, PHP, Garbage Collection, Müll entsorgen
Breadcrumb:
Workshops » Sessions in PHP » Sessions in PHP - Garbage Collection
2. Sessions manuell beenden und 'Müll entsorgen'
[ADSENSE_LINE]Zum Beenden einer Session benutzt man die Funktion session_destroy(). Dadurch wird zwar die aktuelle Sessiondatei auf dem Server gelöscht, die Daten von $_SESSION bleiben aber noch für die Laufzeit dieses Scriptes verfügbar!Aus diesem Grund sollte man vor dem 'zerstören' der Session die Session immer zuerst leeren. Wenn beim Starten der Session ein Cookie gesetzt wurde, sollte dieses außerdem gelöscht werden. Dies erreicht man, wenn man setcookie mir einer Ablaufzeit, die in der Vergangenheit liegt, aufruft.
Beispiele dazu:
PHP:
<?php
// Session starten
session_start();
$_SESSION['foo'] = "bar";
echo $_SESSION['foo'];
// Ausgabe : bar
// Session zerstören
session_destroy();
echo $_SESSION['foo'];
// Ausgabe : bar
?>
PHP:
<?php
// Session starten
session_start();
$_SESSION['foo'] = "bar";
echo $_SESSION['foo'];
// Ausgabe : bar
// $_SESSION leeren
$_SESSION = array();
// Session zerstören
session_destroy();
echo $_SESSION['foo'];
// Ausgabe :
?>
PHP:
<?php
// Session starten
session_start();
$_SESSION['foo'] = "bar";
// Cookie vernichten, muss VOR jeder Ausgabe stattfinden!
setcookie(session_name(), "", time()-3600);
echo $_SESSION['foo'];
// Ausgabe : bar
// $_SESSION leeren
$_SESSION = array();
// Session zerstören
session_destroy();
echo $_SESSION['foo'];
// Ausgabe :
?>
Dieses manuelle Beenden der Sessions bietet sich z.B. bei der Logout-Funktion eines Loginsystems an.
Müllentsorgung
Nicht immer gibt es jedoch ein so eindeutiges Ereignis wie das 'Ausloggen'. Man kann ja auch eine Session für Gäste, also unregistrierte User, starten. Das macht z.B. dann Sinn, wenn man ein Gästebuch hat und kontrollieren will, ob dieser User bereits einen Eintrag hinterlassen hat. Man speichert dann nach erfolgreicher Erstellung eines Beitrages eine Information ( z.B. $_SESSION['GBook']= '1' ) in der Session und kontrolliert diese beim nächsten Versuch dieses Users, einen Eintrag zu hinterlassen.Aber zurück zum eigentlichen Problem. Diese User sind nicht eingeloggt o.ä. und können sich daher logischerweise auch nicht ausloggen. Defacto bedeutet das, dass die Datei auf dem Server, die die Informationen dieser Session enthält, auch nicht gelöscht wird.
Damit nun der Server nicht unnötig mit diesen 'toten' Sessions zugemüllt wird, gibt es eine PHP eigene Müllentsorgung, die sog. garbage colletion. Sie sorgt dafür, dass Sessions die eine gewisse Zeit inaktiv waren, gelöscht werden. Man kann in der php.ini oder per ini_set 3 Optionen verändern, die das Verhalten der garbage collection beeinflussen.
session.gc_probability
wird in Verbindung mit session.gc_divisor dazu verwendet, die Wahrscheinlichkeit zu regeln, mit der die gc (garbage collection) Routine gestartet wird. Grundeinstellung 1.
session.gc_divisor
definiertdie Wahrscheinlichkeit, mit der die garbage collection bei jeder Initialisierung einer Session gestartet wird. Die Wahrscheinlichkeit errechnet sich aus gc_probability/gc_divisor. Die Grundeinstellung ist 100.
Daraus ergibt sich eine Grundwahrscheinlichkeit von 1/100, sodass bei jeder 100. Session Anfrage die Müllentsorgung aktiviert wird.
session.gc_maxlifetime
spezifiziert die Anzahl der Sekunden, nach denen Daten als 'garbage' ( 'Müll' ) betrachtet und entsorgt werden. Die Speicherbereinigung wird zu Beginn einer Session durchgeführt. Grundeinstellung ist 1440.
Zurück zur vorigen Seite:
Sessions in PHP - Sessions starten Weiter zur nächsten Seite:
Sessions in PHP - php.ini