Hallo Tom und danke dir für die ausführliche Antwort.
Das "Login" sollte immer von einer übergeordneten Seite der Hierachie aus erfolgen, da dann sowohl ein "Login" auf Basis eines Cookies, als auch ein Login auf Basis einer HTACCESS-Methode möglich ist.
Damit magst du generell Recht haben (auch wenn ich zugeben muss, nicht 100%-ig verstanden zu haben, wie du das genau meinst), allerdings ist ein Login auf HTACCESS-Basis in meinem Fall nicht nötig – behaupte ich einfach mal.
Außerden sollte man fürs erste Sessions und "Login" nicht vermischen.
Die Session dient ausschließlich der Wiedererkennung des Clients, unabhängig davon, welche Rechte er im System genießt. Das "Login" dient der Verifikation der Rechte. Es sollte als stets zeitnah sein daher und bei jedem Request über die Datenbasis neu überprüft werden.Die Session wird ja auch bei jedem Request überprüft, bedeutet aber nicht, dass der User von einem Request zum nächsten noch dieselben Rechte hat.
Auch damit hast du ansich bestimmt Recht. Da es in meinem System aber eigentlich nur ein mögliches Recht gibt (darf die Seite sehen oder nicht) ist eine Überprüfung der genauen Rechte nicht nötig, da jeder User – sofern es sich bei dem Besucher denn um einen eingeloggten User handelt – immer die gleichen Rechte hat.
[...] Allerdings prüfe ich nicht nur, ob der User eingeloggt ist, sondern auch noch ein paar andere Daten (wie z.B. seit wann er eingeloggt ist)
Meinst Du, wann er sein "Zertifikat" das letzte mal verlängert hat oder wann er es sich angefordert hat? Eine Session wird unter PHP mit jedem Request (der die Sessiondatei verwendet) nachgetriggert.
Ich meine damit, wann der User sich eingeloggt hat. Ich denke, es ist doch einfach sicherer, wenn nach einer bestimmten Zeit ein erneuter Login erforderlich ist, oder? (Wie ich das vor habe ohne den User zu quälen siehe weiter unten.)
session_destroy(); // Löschen der alten Session
Willst Du dem User tatsächlich seine mühevolle Vorarbeit löschen, nur weil er mal eine Minute zu lange überlegt hat?
Nein. Aber klar, das musst du denken, weil ich oben nur eine vereinfachte Version meines Codes gepostet und beschrieben habe. Ich dachte, das würde die Sache vereinfachen, aber es war wohl ein Fehler, da es zu Missverständnissen führt …
Davon, dass die alte Session gelöscht wurde und es sich also um eine neue Session handelt, dürfte der User eigentlich nichts bemerken. Die Seite, die er aufzurufen im Begriff war wird wie ja schon erwähnt gespeichert und nachher wieder aufgerufen. Außerdem speichere ich nach dem erneuten Session-Start auch den Inhalt von $_POST in der neuen Session zwischen, so dass ich auch das nachher wieder herstellen kann. Es ist also so, dass ein User auch dann nichts von der neuen Session bemerken sollte, wenn er gerade ein Formular ausgefüllt hat, als die „Lebensdauer“ seiner Anmeldung ablief. Er wird dann einfach zum Login aufgefordert und danach werden seine eingegebenen Daten verarbeitet als sei nichts gewesen.
Als ich das so gebastelt habe, habe ich mir gedacht, dass ich so an Sicherheit gewinnen könnte. Denn angenommen Cookies sind deaktiviert und der User gibt ungeschickterweise eine URL mit seiner Session-ID weiter, so wird dieser Link ja mit einer neuen Session „entschärft“. Würde ich die alte Session fortsetzen und nur eine erneute Authentifikation per Benutzername und Passwort anfordern, so würde die Session ja erst mit dem Logout des Users an Gültigkeit verlieren. – Oder?
Deine weiteren Hinweise zum Verhältnis von Login und Session sind alle sehr interessant – aber ich glaube, so umfassend ist mein aktuelles Projekt nicht. ;-)
Gerade was du zur Rechtevergabe sagst; wie gesagt gibt es bei mir quasi keinen Unterschied zwischen Login und Rechten, da jeder, der eingeloggt ist, das gleiche Recht hat.
Aber ich werde – sollte ich mal etwas Größeres vorhaben – dein Posting noch(mehr)mals überdenken – vielen Dank also!
Gruß,
Claudius