Moin!
ich habe ein Problem. 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.
Diese Methode ist schlecht.
Die "max. lifetime" hätte richtigerweise lieber "min. lifetime" genannt werden sollen, denn damit konfiguriert man die Zeit, nach der _frühestens_ die Sessiondaten von PHP gelöscht werden.
Keinesfalls ist aber definiert, dass PHP _exakt_ nach Ablauf dieser Zeit löscht und so die Session ungültig macht. Tatsächlich kommt für diese Aufräumaktion ein Zufallsprinzip zum Einsatz: Nur jeder Xte von Y Zugriffen auf PHP-Seiten (Standard: jeder hunderste, also 1%) löst die Prüfung auf abgelaufene Session-Daten aus.
Mit anderen Worten: Du brauchst schon eine recht besuchte Site, auf der in relativ kurzer Zeit mindestens 100 Zugriffe erfolgen, damit mit einigermaßen hoher Wahrscheinlichkeit die Löschung veralteter Sessiondaten anläuft.
Wenn das nicht der Fall ist, kann es durchaus passieren, dass eine Session auch noch drei Wochen aktiv ist.
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. Ich hab derzeit keinen Plan wie ich das ganze Umsetzen könnte, jemand von eich eine Idee?
Die Lösung ist ganz simpel:
1. Sorge dafür, dass deine Sessiondaten lange leben. So lange, wie du glaubst, dass es dauert, dass ein Benutzer eine längst abgelaufene Session wieder aufnehmen will. Wenn du die Grenze bei einer Stunde setzt, dann mußt du die max. Lifetime auf eine Stunde setzen.
2. Integriere Code, der bei jedem Zugriff prüft, ob der gespeicherte Zeitpunkt des letzten Zugriffs länger als deine 20 Minuten zurückliegt. In diesem Fall wird die Session von dir als abgelaufen betrachtet, und du kannst eine entsprechende Fehlermeldung ausgeben.
3. Integriere Code, der (nachdem die Session als gültig erkannt wurde) den Zeitpunkt des letzten Zugriffs in die Sessiondaten schreibt.
Solange die Sessiondaten existieren (wie dargelegt ist das _mindestens_ der Zeitraum der max.lifetime), wird dein User durch die Fehlermeldung "Session abgelaufen" geleitet werden. Wurden die Sessiondaten gelöscht, wird er genauso behandelt, wie ein komplett neuer User.
- Sven Rautenberg
"Love your nation - respect the others."