Hallo!
Also erstmal danke für Deine sehr ausführliche Antwort! :-))
Moin!
Das ist typisch für PHP-Sessions, wenn Cookies benutzt werden.
OK, Das heißt also das ich gerade schon Cookies benutz?
Mit ziemlicher Sicherheit: Ja.
Ok. Also muss ich auf jeder Internseite überprüfen ob der User ein Recht hat dort hinzukommen.
Genau. Und die Information dazu sind Benutzername und Passwort, die der Benutzer mal angegeben hat, auf der einen Seite, und die Berechtigungsstruktur der Benutzerdatenbank (eine simple Textdatei, in der das irgendwie drinsteht, fällt auch unter diese Kategorie - das muß nichts mySQL-mäßiges sein) auf der anderen Seite.
Die Session ist nur dazu da, die einmal getätigte Angabe von Benutzername und Passwort zu speichern und auf jeder Seite der Berechtigungsprüfung zur Verfügung zu stellen.
Diese Prüfung muß immer gegen die aktuelle Benutzerdatenbank durchgeführt werden, du solltest die Berechtigungen nicht in der Session selbst speichern. Andernfalls wäre es möglich, dass jemand sich einloggt, du dessen Account danach dann schließt, er aber mit seinem Login weiterhin lustig alles tun dürfte, was er mal tun durfte. Er würde erst ausgesperrt, wenn seine Session aufgrund von Inaktivität abgelaufen ist oder er sich ausloggt und später wieder einloggen will.
Ich muss also jedes mal die aus dem POST übergebenen Werte abfragen und mit den Werten in der DB überprüfen?
Oder gibt es eine ander Lösung?Dein ganzer interner Bereich vergibt an jeden, der eine Seite von dort abruft, eine Session-ID. Das geschieht schlicht dadurch, dass auf jeder Seite session_start() aufgerufen wird, weil sonst die Session ja ohnehin nicht funktioniert.
Jede Seite prüft dann, ob die in der Session gespeicherten Anmeldedaten (Username, Passwort) in der Weise gültig sind, dass dieser Benutzer die Seite betrachten darf. Falls ja, dann wird die Seite ausgegeben.
Ok, das habe ich verstanden. Die Sessio-ID bleibt ja für den Zeit der Anmeldung einmalig und wird trotz des "mehrmaligen" Startens nicht überschrieben bzw. jedesmal eine neue Session gestartet? Richtig?
Zur Zeit bekomme ich es aber nur hin das ich nur den Namen in die Session gespeichert bekomme.
Quellcode sieht folgendermaßen aus:
$_SESSION['ID'] = $_POST['username'];
Kann ich jetzte in dem ich in einer if-Schleife folgendes schreibe:
if(blalala)
{
$_SESSION['ID'] = $_POST['username'];
$_SESSION['ID'] = $_POST['password];
}
Den Benuzternamen und Passwort in die Session-ID schreiben?
Wenn ich noch mehr Datenvergeleiche haben will sollte ich die dann auch in dei Session schreiben?
Dir wird auffallen, dass ein nicht eingeloggter User natürlich noch keinerlei Anmeldedaten in seiner Session haben kann - deswegen leitet jede Seite den Benutzer auf die Anmeldeseite weiter, wenn die Seite feststellt, dass die Anmeldedaten nicht gültig sind, um die Seite zu betrachten.
Die Anmeldeseite selbst sorgt lediglich dafür, dass der Benutzer ein Formular angezeigt bekommt, und sie trägt die vom Benutzer angegebenen Anmeldedaten in die Session (also das Array $_SESSION) ein.
Du könntest an dieser Stelle natürlich noch einen kleinen Mechanismus einbauen, der dafür sorgt, dass der Benutzer nach erfolgter Anmeldung wieder zur ursprünglich gewünschten Seite weitergeleitet wird, nachdem er die Anmeldedaten übermittelt hat - ganz wie du meinst.
Wird die Session eigentlich außer beim Logout dann auch beim schließen des Fensters auf dem Server gelöscht wenn ich Cookies benutze?
Die Session selbst wird niemals gelöscht - zumindest solltest du es so betrachten. Zwar räumt PHP selbst unbenutzte alte Session-Daten mit einem gewissen Wahrscheinlichkeitswert auf, darauf sollte man sich aber nicht wirklich verlassen.
Damit einmal erfolgte Logins nicht endlos gültig sind, solltest du in den Session-Daten auch eine Zeit abspeichern, um zu lange unbenutzte Logins ebenfalls aussperren zu können. Das geht im Prinzip ganz einfach:
Damit jemand Zugriff auf eine gesperrte Seite haben darf, muß die letzte Aktivitätsuhrzeit weniger als z.B. 60 Minuten zurückliegen, und Username und Passwort müssen natürlich stimmen.Wenn das der Fall ist, setzt du in den Session-Daten die Aktivitätsuhrzeit auf die aktuelle Uhrzeit - auf diese Weise bleibt der Login bei Aktivität des Benutzers erhalten, und du hast einen sehr exakten Mechanismus zum zeitgesteuerten Logout.
Also eine Timestemp in die Session-ID setzen?
Wenn der Benutzer eigenständig einen Logout veranlassen möchte, dann setzt du z.B. Username und Passwort auf den Leerstring - die Prüfung auf jeder Seite wird ihn dann nicht mehr unangemeldet reinlassen.
Ok. Also in die Session-ID wird nix hineingeschrieben bzw. die Daten mit leerem inhalt überschrieben.
- Sven Rautenberg
Gruß
Hauke
btw.: Weißt Du eine gute Adresse wo das ganze, in deutsch, gut und verständlich nochmals zum nachlesen erklärt ist?