PHP Session mit Timeout-Funktion
In diesem Beitrag zeigen wir euch, wie ihr eine PHP-Session startet und mit Hilfe einer Timeout-Funktion nach 30 Minuten wieder löscht.

Mit Hilfe von PHP Sessions lassen sich Informationen auf einer Website für eine gewisse Zeit festhalten. Diese Daten werden entweder in einem Cookie gespeichert oder in der URL der Website übermittelt. Wann eine solche Session abläuft und die Daten wieder gelöscht werden ist abhängig von den Servereinstellungen der Website. Wenn ihr jedoch selbst bestimmen möchtet, wann eine Session in eurem Webprojekt abläuft, könnt ihr das mit einer Timeout-Funktion lösen.
Eine Session starten und löschen (zerstören)
Eine Session startet ihr mit dem Befehl session_start()
. Nachfolgend notierte Informationen werden nun in der Session gespeichert und können auch beim Neuladen der Seite oder beim Wechsel auf eine andere Seite aufgerufen werden.
session_start();
Mit dem Befehl session_destroy()
löscht bzw. zerstört ihr die Session.
session_destroy();
30 Minuten Timeout zu einer PHP Session hinzufügen
Wenn ihr möchtet, dass eine Session nach einer bestimmten Zeit der Inaktivität des Besuchers gelöscht wird, könnt ihr sie mit einer Timout-Funktion verknüpfen. Gebt hierzu nach dem Start der Session eine $session_timeout
Variable an. Dieser Variable übergebt ihr den Zeitwert des gewünschten »Timeouts« in Sekunden. Das folgende Beispiel nutzt 1800 Sekunden für einen Timeout nach 30 Minuten.
Anschließend müsst ihr abfragen, ob der letzte Besuch des Benutzers bereits in einer Session-Variablen ($_SESSION['last_visit']
) gespeichert ist. Wenn das nicht der Fall sein sollte, setzt ihr die Variable und übergebt ihr die aktuelle Zeit mit der PHP-Funktion time()
. Anschließend prüft ihr, ob der letzte Besuch länger her ist als eure angegebene Timeout-Zeit. Wenn das der Fall ist, löscht ihr die Session wieder. Anschließend übergebt ihr der Session-Variablen ($_SESSION['last_visit']
) die aktuelle Zeit erneut.
session_start();
// Zeit bis zum »timeout« in Sekunden
$session_timeout = 1800; // 1800 Sek./60 Sek. = 30 Minuten
if (!isset($_SESSION['last_visit'])) {
$_SESSION['last_visit'] = time();
// Aktion der Session wird ausgeführt
}
if((time() - $_SESSION['last_visit']) > $session_timeout) {
session_destroy();
// Aktion der Session wird erneut ausgeführt
}
$_SESSION['last_visit'] = time();
Anwendungsbeispiel Besucherzähler
Eine Session mit einer Timeout-Funktion zu verknüpfen bietet sich unter anderem bei der Verwendung von Trackingpixeln auf einer Website an. Ist ein Besucher länger als eine gewisse Zeit inaktiv wird sein Besuch neu gezählt. Bewegt er sich von Unterseite zu Unterseite wird seine letzte Aktivität gespeichert und kein erneuter Zählpixel abgeschossen.
Schade, ich hätte gerne erfahren, wie man in PHP die Freigabe von für die Session angelegten
Ressourcen nach einer festgelegten Zeit ab dem letzten Request des Users programmiert. Und zwar egal, ob der User noch jemals in SEINEM Leben einen Request sendet. Der Alltag ist eigentlich, dass User ihre Browser mit vielen offenen Tabs einfach schliessen, und deine Applikation ist dabei nur eine unter vielen. Die Cookies sind dann weg, dein Server kriegt davon nichts mit.
Nach meiner Ansicht erfordert ein Timeout einen Timer, der dem main thread bei Ablauf der definierten Zeit asynchron einen Event schickt – alles andere funktioniert in der Praxis nicht.
Ich habe jahrelang Webapplikationen mit JSF geschrieben, und da war diese wegen Security und Ressourcenfreigabe entscheidend wichtige Funktion einfach on board.
Äh, was sind „Gravatare“??? Ich will eigentlich, dass meine Adresse nur für dich sichtbar ist!