Frage zu Log-in Funktion "Angemeldet bleiben"?

...komplette Frage anzeigen

1 Antwort

Das funktioniert so:

Beim einloggen wird Username und Passwort mit den gespeicherten Zugangsdaten in der Datenbank abgeglichen. Stimmen sie, wird serverseitig eine Session angelegt. Stell dir das vor wie eine Tabelle mit den Spalten "Session ID", "User ID", "Timeout" und ggf. weiteren Daten, die ständig gebraucht werden (z.B. eine Kopie vom Anzeigename) oder Session-spezifisch sind. Jede aktive Session ist eine Zeile in der Tabelle. Beim Anlegen einer Session wird mithilfe einer Hashfunktion eine Session ID generiert, die dann im zum Nutzer gesendet wird. Der Browser legt daraufhin ein Cookie an, das die ID speichert. Das Cookie hat ebenfalls ein Timeout gesetzt, ab dem der Browser es als verfallen ansieht. 

Bei jedem Seitenaufruf wird jetzt das Cookie in der HTTP-Anfrage mitgesendet. Der Server sieht die Session ID, prüft seinerseits ob es nach seinen Informationen noch aktuell ist. Und wenn ja, weiß er welcher Nutzer es ist der die Seite aufgerufen hat (er kennt ja die zugehörige User ID) und erkennt ihn als eingeloggt an. Fehlt das Cookie in der Anfrage (vom Nutzer im Browser gelöscht / abgelaufen) oder ist serverseitig der Timeout abgelaufen weiß der Server nicht mehr welcher Nutzer das ist weil er es entweder tatsächlich nicht weiß oder die Session nicht mehr als gültig anerkennt und die Zeile löscht. Das ist der automatische Logout. Der manuelle Logout entfernt die Zeile direkt auf Nutzerwunsch.

Wobei gesagt werden muss dass die entscheidende Variable eher der serverseitige Timeout Wert ist, da ein Nutzer das Cookie nach Belieben manipulieren kann. Außerdem wird in der Praxis häufig immer eine Session gestartet, auch wenn sie nicht mit einem Nutzer assoziiert wird (das geschieht dann erst beim Login). Aber das sind Feinheiten der Implementierung.

Die "angemeldet bleiben" Option macht nichts anderes als den Timeout im Cookie und der Session-Variable hochsetzen. Entweder auf einen besonders langen Zeitraum (z.B. eine Woche) oder gar auf sowas wie "unendlich". 

D.h. alles hängt hier vom Cookie ab. Jeder, der an deine Cookies kommt hat deine (noch aktuelle) Session ID und kann dem Server vorgaukeln dass du es bist und ist eingeloggt. Ein Browser erlaubt dem JavaScript auf Webseiten zwar nur das auslesen der eigenen Cookies (Das JavaScript in der gmx.de-Webseite darf Cookies für gmx.de auslesen), aber wenn ein Angreifer es schafft eigenen JavaScript-Code einzuschleusen (z.B. weil eine Kommentarfunktion die Eingabe nicht überprüft) könnte er die ID auslesen und sich schicken. Das nennt sich Cross-Site-Scripting (XSS-Attacke).

Wenn du auf das Schloss neben der Adresszeile klickst, dir die Cookies der aktuellen Webseite ansiehst kannst du ein Cookie finden mit einem Namen wie PHP_SESSION_ID oder gfmsession1 oder ähnlich. Das ist die Session ID. Wenn du willst kannst du dir ja mal ein Addon wie EditThisCookie in einem zweiten, völlig anderen Browser installieren, die Session ID vom ersten Browser kopieren, unter der selben Domain und Cookie-Namen mithilfe des Addons manuell anlegen und die Seite aufrufen. Dann müsstest, du wenn alles klappt, sofort angemeldet sein ohne dass du jemals vorher die Webseite in dem Browser aufgerufen hast. Es sei denn, die Webseite trifft Maßnahmen dagegen und speichert sich in der Session-Variable auch Browser-Informationen und/oder IP-Adresse und nutzt das zusätzlich für die Prüfung. 

Ich danke dir für die ausführliche Erklärung :)

0

Was möchtest Du wissen?