Sven Rautenberg: Dauerhafter Login, Session Lifetime?

Beitrag lesen

Moin!

Die UIN, Anwendername und anderes wird in einer Session gespeichert. Die UIN und Username wird dann mit der DB verglichen.

Angenommen man wollte ein dauerhaftes Login von einem Jahr.

$ablauf = time() + + 60*1440*365; //wäre ein Jahr

Das würde dann für den DB Eintrag ja reichen.
Man müsste doch aber auch vermutlich dafür sorgen, dass die Session auf dem Server überhaupt so lange "lebt" oder?

Wenn du so ein "remember my login" bauen willst, du es nicht in die Session.

Erstens: Das Session-Cookie geht beim Schließen des Browsers verloren.
Zweitens: Die PHP-Session-Daten sind ebenfalls dafür gedacht, nach einer nicht so langen Zeit der Inaktivität gelöscht zu werden.
Drittens: Es bringt dir außer verbrauchtem Speicherplatz auch keinen Vorteil, wenn du Sessiondaten mindestens ein Jahr lang aufbewahrst - insbesondere, weil du damit vermutlich auch Daten aufbewahrst, deren Sinn durch Programmveränderung verloren gegangen ist, weil sie nicht mehr gebraucht werden, sondern z.B. anders abgespeichert wurden. Umgekehrt musst du in allen Programmteilen damit rechnen, dass die Datenstrukturen von vor einem Jahr auf deine aktuelle Software treffen, und dass es bei Änderungen in der Software zu inkompatiblen Situationen kommt.

Die korrekte Herangehensweise wäre, dem User ein lange lebendes Cookie zu geben, in dem ein sehr langer, kryptografisch zufälliger String enthalten ist. Dieser String gilt als Ersatz für Username plus Passwort und erlaubt ebenfalls den Zugriff genau so, wie ein normales Login.

Das Session-Handling für's Login wird etwas erweitert: Wenn ein User auf eine zugriffsgeschützte Seite zugreifen will, aber in seiner Session noch nicht eingeloggt ist, schaut die Website nach diesem langlebigen Cookie. Existiert es, und ist es in der Datenbank als gültiger String für einen User gespeichert, wird dieser automatisch so eingeloggt, wie es auch durch Username und Passwort geschehen würde. Andernfalls erscheint die normale Login-Seite.

Natürlich kann man das auch weiter an den Anfang des Besuchs rücken, und schon beim ersten Kontakt und einer (dann noch) leeren Session das Cookie suchen und ggf. den User sofort einloggen.

- Sven Rautenberg