PHP Session mit Timeout-Funktion

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.

Geschrieben von:

Jonas Hellwig

Benutzerbild

Jonas ist Gründer der Agentur kulturbanause und des kulturbanause Blogs. Er arbeitet an der Schnittstelle zwischen UX/UI Design, Frontend und Redaktion und hat zahlreiche Fachbücher und Video-Trainings veröffentlicht. Jonas Hellwig ist regelmäßig als Sprecher auf Fachveranstaltungen anzutreffen und unterstützt mit Seminaren und Workshops Agenturen und Unternehmen bei der Planung, der Gestaltung und der technischen Umsetzung von Web-Projekten.

Jonas Hellwig bei Xing

Robert Menzel

Benutzerbild

Robert arbeitet als Frontend-Developer und Web-Designer bei kulturbanause. Zu seinen Aufgaben gehören die visuelle Gestaltung und die technische Umsetzung von Websites, eCommerce-Shops oder dessen Kombination. Besonders gerne übernimmt er die Entwicklung individueller und anspruchsvoller Websites mit umfangreichen ineinandergreifenden Funktionen, getreu dem Motto: »Der beste Lack bringt nichts, wenn die Maschine darunter nicht läuft.«

Feedback & Ergänzungen – 1 Kommentar

  1. Wolf
    schrieb am 10.09.2021 um 16:02 Uhr:

    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!

    Antworten

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

Projekte mit kulturbanause

Wir wissen wovon wir reden. Wir realisieren komplette Projekte oder unterstützen punktuell in den Bereichen Design, Development, Strategy und Content.

Design + Code

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Schulung + Beratung