Hallo Tom,
danke für Deinen ausführlichen Input!
Beantwortet das jetzt ungefähr deine Frage?
Naja, den ersten Teil habe ich _überhaupt nicht_ verstanden. Das hättest Du mir auch ein chinesisches Buch über Topfpflanzen hinlegen können. Das übertrifft mein Wissen und Verständnis um Lichtjahre. Aber wenn ich es richtig verstanden habe, sprichst Du da ja die Authentifizierung per .htaccess Datei und mit AuthType Basic an. Ich hingegen sprach rein von einem herkömmlichen Loginsystem _ohne_ .htaccess Authentifizierung, also so, wie es im Erstposting dieses Threads IMHO gemeint war.
Aber Bezug nehmend auf Deinene letzten 2 Absätze, wo Du auf meine eigentliche Frage eingehst:
Die IP einzubeziehen ist bei diesem Protokolltyp (HTTP) nicht sinnvoll, da es den eigentlichen Sinn des Protokolls konterkarieren würde. AOL hat uns das ganz massiv vorgeführt.
Auch da verstehe ich nicht, wie Du das meinst, aber wenn ich den darauf folgenden Absatz richtig interpretiere, dann bist Du der Meinung, dass IPs ein und derselben Nutzer zu oft wechseln, als dass man das einbauen soll. Richtig?
Meine persönliche Herangehensweise:
Auf meinem Webspace gibt es auch einen Bereich, der nicht für jeden bestimmt ist. Es existieren ein paar Gruppen, denen dann auf ein und der selben Seite je nach Gruppe verschiedene Inhalte präsentiert werden. Dort löse ich den Login, der nach 15 Minuten automatisch beendet wird, folgendermaßen:
Die Übertragung von Gruppenname und PIN erfolgt mit SSL. Ist die Überprüfung der Daten erfolgreich, passiert folgendes: Aus einer Kombination aus time() in Mikrosekunden und einer Stringkette entsteht eine 30-stellige unique Zufalls ID. Diese ID ordne ich einer neuen 15-Minuten-Loginzeit eines Useres zu. Der User selbst bekommt einen Cookie 'id' mit der ihm zugeteilten ID und der Ablaufzeit von 15 Minuten. Auf dem Server wird eine Session angelegt. Dabei ist die ID der Variablenname und der Variablenwert entspricht dem Gruppennamen, für die man eingeloggt ist. Zusätzlich gibt es auf dem Server eine .txt Datei mit einem Array, in dem die Indices den Timestamp des Login-Endes und die Werte die IDs wiedergeben. Die neu erstellte ID wird nun samt dem gewünschten Gültigkeits-Endzeitpunkt in dieses Array dazugespeichert.
Bei jedem Seitenaufruf, wo nun ein Login bzw. die zugehörige Gruppe überprüft werden soll, müssen für eine erfolgreiche Ausgabe 3 Punkte erfüllt sein:
1.) Beim User muss sich ein Cookie 'id' befinden.
2.) Auf dem Server muss sich eine Sessionvariable befinden, deren Name der Inhalt des 'id' Cookies ist.
3.) Das Array der .txt Datei wird ausgelesen und sämtliche Werte, deren Integerwert des Indexnamens kleiner als der aktuelle Timestamp sind, werden gelöscht. Danach muss sich der Inhalt des 'id' Cookies noch immer als Wert imm Array, das jetzt nach der Bereinigung wieder gespeichrt wird, befinden.
Trifft das alles zu, gilt der User als eingeloggt und die Ausgabe erfolgt der Gruppe entsprechend. Anderenfalls gibt es eine automatische Weiterleitung zur Loginseite, wobei sämtliche evt. existierende Cookies und SESSION Variablen gelöscht werden.
Bei jedem Aufruf einer geschützten Seite verwende ich zusätzlich session_regenerate_id(). Die Passwörter der Gruppen sind md5()-gespeichert. Die Datei mit den Gruppen und Passwörtern sowie alle anderen Ressourcen, die hier arbeiten, liegen außerdem außerhalb des Rootverzeichnisses meiner Domain, können also vom User nicht direkt per URL aufgerufen und ausgelesen werden.
Dieses System kommt ohne einer Datenbank aus und für die Verwaltung der paar Gruppen, mit denen ich hier arbeite, ist das IMHO _mehr_ als sicher.
Mit lieben Grüßen
Melvin Cowznofski
What – me worry?