wahsaga: Sessions und Zeitüberschreitung

Beitrag lesen

hi,

Und zwar will ich umsetzen, bei meinem Loggin System der Nutzer nach 20 Minuten auto. inaktiv wird. Ist auch kein Problem, setze dafür einfach die max. lifetime der Session auf 20 Minuten in der php.ini.

Bilde dir nicht ein, damit dein "Problem" gelöst zu haben.

Auch wenn der Name dieser Einstellung, session.gc_maxlifetime, suggeriert, es handele sich um eine "maximale" Lebensdauer, ist ihre Wirkung eigentlich exakt andersherum: Sie ist eine _Mindest_-Lebensdauer. Ab X Sekunden nach dem letzten Zugriff ist eine Session-Datei auf dem Server (bzw. andere gewählte Ablageform für die Daten) zum Löschen durch den Garbage Collector freigegeben - das bedeutet aber noch nicht, dass dieser dann auch zwangsweise aktiv wird, denn sein Aufruf ist zufallsgesteuert (aus gutem Grund, denn bei jedem Request alle Sessions durchzuschauen, wäre reichlich unperformant).

Mein Porblem ist aber jetzt, dass der User der am surfen gewesen ist angezeigt bekommen soll, warum er ausgeloggt wurde und er auf eine spezielle Seite weitergeleitet wird.

Wenn die serverseitig abgelegten Session-Daten erst mal entfernt worden sind, hast du gar keine Möglichkeit mehr festzustellen, ob der User in einer "abgelaufenen" Session eingeloggt war, oder noch überhaupt keine gültige Session hatte. Es wird lediglich eine Session-ID übermittelt, der entweder gespeicherte Daten erfolgreich zugeordnet werden können, oder eben nicht.

Wenn du also eine "Zeitüberschreitung" haben und auf diese auch noch gesondert reagieren willst, musst du dir erst mal einen Mechanismus zur Verfolgung dieser ausdenken.
Man könnte bspw. vergebene Session-IDs noch zusätzlich irgendwo hinterlegen (Datenbank, Dateien) und abfragen - aber hier stehst du dann u.a. vor dem Problem, dich um die "Müllbeseitigung" innerhalb dieser zusätzlichen Ablage selbst kümmern zu müssen.
Simpler zu realisieren wäre es bspw., die Lifetime der Sessions generell _heraufzusetzen_, und in der Session jeweils den letzten Zugriffszeitpunkt zu vermerken - dieser könnte dann auf die eingangs genannte Zeitspanne von 20 Minuten abgeprüft werden.
Ab dem Zeitpunkt, wo die Lifetime der Session überschritten und diese entsorgt wurde, ist natürlich eine solche Unterscheidung zwischen "eingeloggt, aber Zeit überschritten" einerseits und "bisher noch gar nicht erfolgreich eingeloggt" andererseits nicht mehr machbar, siehe oben.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }