Für diese Übung brauchst Du mehr als zwei Dateien: eine für die Profilseite, die nur bei bestehender Session angesehen werden darf, und eine andere für das Login Formular. Du kannst die Dateien in profil-vorlagen.zip verwenden. Ziel ist es, die Anwendung von Sessions und Cookies zu verstehen.
Loginformular
- Beginne mit der Datei login.php. Definiere zwei Variablen im PHP Code, eine für den Benuzternamen, und eine für das Passwort.
- Login-Abfrage: in dieser Datei kannst Du gleich mit IF abfragen,
- ob das Formular versendet wurde
- ob Benuztername und Passwort aus dem Formular mit Deinen Variablen übereinstimmen
- Anmelden des Benutzers: starte eine Session mit session_start(), am besten ganz oben in Deinem Code. Stimmen die Benutzerdaten überein, so speichere den status unter dem index "loggedin" ins Session Array. Um später die Session-Zeit zu kontrollieren, speichere ebenfalls die Login-Zeit ins Sesssion Array mit der Funktion time()
- Erinnern des Benuzters: speichere nun noch ein Cookie, welches mindestens ein Monat gültig bleiben soll, in dem Du den Spitznamen des Besuchers speicherst. Ist ein Cookie vorhanden mit dem Spitznamen, so gebe über dem Login eine Begrüssung aus (z.B. "Hallo Fritzli, willkommen zurück, bitte melde Dich zuerst an")
- Nach erfolgreichem Speichern der Session und des Cookies, leite den Benutzer mit header() weiter auf sein Profil
Profilseite
- Öffne nun die Datei profil.php - diese soll einerseits mit einer Prüfung vor unbefugtem Zugriff geschützt werden, andererseit soll sie einen Button enthalten, mit dem der Benutzer sich wieder abmelden kann.
- Loginstatus prüfen: starte die Session mit session_start(), und füge dann eine IF-Abfrage hinzu, in der Du den Login-Status sowie Login-Zeit abfragst. Der Loginstatus muss vorhanden sein, die Login-Zeit darf nicht mehr als eine halbe Stunde vergangen sein, ansonsten lösche die Session-Werte mit unset() und mache eine Umleitung zum Login mit header()
- Logout Button: füge einen Button oder Link ein, der bei Klick einen Wert per GET ans Script übermittelt (z.B. aktion=logout) Frage danach mit einer weiteren IF Abfrage ab, ob dieser Wert vorhanden ist. Wenn er vorhanden ist, nutze ebenfalls unset() und header(), um wieder die Session zu löschen und auf das Login-Script umzuleiten.
Gedanken dazu
- Um die Prüfung des angemeldeten Benutzers noch etwas strenger zu machen, schreibe zusätzlich noch den User-Agent ins Session-Array und prüfe diesen ebenfalls bei jedem Aufruf von profil.php
- Der Code, welcher die Profilseite schützt, könnte natürlich bei beliebig vielen anderen Scripts ebenfalls eingebunden werden, so dass ein Login Formular mehrere Seite schützen kann. Idealerweise sollte der Code in diesem Fall in einer Funktion stehen. Überlege Dir, wie Du Deine Scripts organisieren könntest, um eine Funktion zu schreiben und zu nutzen.