Sven Rautenberg: session.gc_maxlifetime geht nicht

Beitrag lesen

Moin!

Und wenn ich alles richtig verstanden habe kann man eine Session nicht nach einer bestimmmten Zeit löschen

Das muß man ja auch nicht, es reicht ja, nach Ablauf einer Zeitspanne seit der letzten Aktivität den Zugriff mit der jeweiligen Session-ID zu verweigern.

Im Prinzip könnte man einen Cronjob auf die Sessiondatien ansetzen, der aller Minut schaut, ob die Lebensdauer schon abgelaufen ist. Davon bekommt aber der Client nichts mit und das von ihm angestoßene Script (Request) auch nicht. Das weiß nun nicht, warum die Sessiondatei nicht mehr da ist und würde, da ja die SessionID brav vom Client geliefert wurde, einfach eine neue Sessiondatei anlegen.

Die Sessiondateien würde ich überhaupt nicht anfassen. Die sind einzig und allein Sache der Verwaltung von PHP.

Und daran siehst Du auch, wo das Login vermerkt sein könnte: In der Sessiondatei. Da könntest Du einen pro Session individuellen Timestamp für "logged since", "last request" und eine universelle Zeit für "logout after x minutes of idle" eintragen.

Exakt.

Jeder Befehl "session_start()" sollte gefolgt werden von einer Prüfung, ob die Session noch aktuell ist:

Testen, ob eine dafür vorgesehene Session-Variable existiert.

  • Wenn ja: Darin ist die Zeit des letzten Zugriffs gespeichert - liegt die Zeit innerhalb der letzten X Minuten?
    • Wenn nein: Session-Daten komplett löschen: $_SESSION=array();
    • Wenn ja: Alles ist gut.
  • Wenn nein: Session ist neu. Alles ist gut.

Jetzt in die Session-Variable die aktuelle Zeit eintragen.

Und in der Folge wird das Skript entsprechend der vorhandenen Session-Daten entscheiden müssen, ob der Benutzer eingeloggt ist, und welche Seite/Aktion kommen soll, wenn das nicht der Fall ist. Diese Programmierung ist aber unabhängig von irgendwelcher zeitlichen Begrenzung und müßte ohnehin geschehen.

Wenn der Client nun den nächsten Request schickt, prüfst Du erst, ob das noch "In Time" ist. Wenn ja, wird "last request" aktualisiert, sonst wird die Session gekillt. -> Leeren Cookie an den Client, session_destroy().

Warum die Session killen? Sessiondaten leeren ist vollkommen ausreichend. Die Session-ID kann doch gerne weiterverwendet werden.

- Sven Rautenberg

--
"Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
(fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)