Lionstarrs Linux Blog

Ein Blog über Linux und die Welt

Loginsystem per PHP

Jeder PHP-Einsteiger stolpert früher oder später über das Thema: Ein Login-System programmieren. Was sich ersteinmal sehr kompliziert anhört, lässt sich – danke der PHP-Session-Funktionalität – sehr einfach verwirklichen.
Zuerst einmal sollte man sich Gedanken über die Benutzer-Tabelle machen, die in diesem Beispiel mit MySQL realisiert wird. Auf jeden Fall braucht ein Benutzer einen Namen und ein Passwort. Um das Einloggen möglich zu machen benötigen wir zusaätzlich ein Feld, welches die Session speichert, die der Benutzer gerade nutzt. Natürlich darf in keiner SQL-Tabelle der Primary-Key, die id fehlen! Und da haben wir auch schon die Struktur der Tabelle:


[Hier klicken um die Tabelle zu sehen]

Diese Tabelle kann mit dem folgenden SQL erzeugt werden:


[Hier klicken um das SQL zu sehen]

Dieses SQL kann man nun z.B. mit PHPMyAdmin ausführen, um die Tabelle user zu erhalten, mit der das Skript arbeiten wird. Nun bringt einem eine Tabelle an sich natürlich noch wenig – als wird jetzt das Login-Skript geschrieben. Nun ist es so, dass man – meiner Meinung nach – immer am weitesten in PHP kommt, wenn man den Code in Module fasst. So hat fast jedes meiner Projekte gleich mehrere Dateien. Hier ein Beispiel:

  • index.php – Hier wird die Variable action ausgewertet,
    um die richtige Include-Datei auszuführen.
  • config.inc.php – Alle Konfigurations-Variablen werden hier per define als Konstanten festgesetzt.
  • mysql.inc.php – Die Verbindung zu MySQL wird hier gestartet.
  • functions.inc.php – Alle selbstgeschriebenen Funktionen, z.B. zum Einloggen oder Registrieren eines Benutzers finden hier ihren Platz.

In diesem Projekt werden wir zusätzlich zu den hier aufgelisteten Dateien noch eine Datei zum Login, eine zum Logout und eine für den Member-Bereich benötigen.
Wie man sieht, benutzt dieses Projekt Smarty, welches downgeloaded werden muss.
Hier ersteinmal das Herzstück des Projektes, die index.php:


[Hier klicken um die Datei index.php zu sehen]

Was hier geschieht ist schnell erklärt: Erst werden alle benötigten Dateien eingebunden und eine Session gestartet (1-6). Dann wird der Wert der GET/POST-Variable action abgefragt und entschieden, was zu tun ist (8-22). Passend zur aktuellen Aktion wird daraufhin eine Datei eingebunden, die auf jeden Fall die Variablen $title und $content setzen sollte! Zwischen Zeile 25 und 30 wird zusätzlich geprüft, ob der Benutzer eingeloggt ist, um passenderweise den Link zum Ein- oder Ausloggen anzuzeigen. Diese Variablen werden dann an das Smarty-Template weitergerreicht. Das Template ist relativ einfach gehalten und ich habe Teile davon von der Seite CSS4YOU:


[Hier klicken um die login.tpl zu sehen]

Wie man sieht, macht hier die CSS-Datei die eigentliche Arbeit. Diese findet man im Download des Projektes, da das ja nicht unbedingt relevant ist!

Nun benötigen wir natürlich noch die Dateien config.inc.php, mysql.inc.php und smarty.inc.php. Die functions.inc.php werden wir als letztes besprechen.
Hier also nun die Dateien:


[Hier klicken um die config.inc.php zu sehen]

[Hier klicken um die smarty.inc.php zu sehen]

[Hier klicken um die mysql.inc.php zu sehen]

Ich denke, dass die Dateien eigentlich selbsterklärend sind. Man könnte die Dateien natürlich auch in einer Verbinden, aber so ist das noch ein bisschen übersichtlicher.

Jetzt geht’s aber an das richtig wichtige: Hier sind die Dateien, die in der index.php includiert werden, eine nach der anderen:


[Hier klicken um die register.inc.php zu sehen]

In der register.inc.php kann der Benutzer sich – wie der Name schon sagt – registrieren. Er wird direkt nach der Registrierung ohne jegliche Email-Aktivierung o.Ä. aktiviert und kann sich einloggen. Zeilen 7-32 behandeln den Fall, dass der User bereit’s registrieren gedrückt hat und prüfen die Daten auf eventuelle Fehler. Wenn alles korrekt ist, wird die Funktion register aufgerufen, die das eigentliche Registrieren des Users übernimmt. Hier nun die nächste Datei:


[Hier klicken um die login.inc.php zu sehen]

Ebenfalls eigentlich selbsterklärend: Erst wird geprüft, ob der Benutzer bereits eingeloggt ist. Ist er das nicht und hat schon Login gedrückt wird er auf Existenz überprüft und dann eingeloggt. Andernfalls (Der Button “Login” wurde noch nicht betätigt) wird ein Formular zum einloggen ausgegeben. Wenn der Benutzer bereits eingeloggt ist, wird er darauf hingwiesen. Nach dem Login kommt der Logout:


[Hier klicken um die logout.inc.php zu sehen]

Der Benutzer darf sich nur ausloggen, wenn er bereits eingeloggt ist. Ist er das, wird er auf seinen Wunsch hin durch die Funktion logout ausgeloggt. Hier schließlich noch die Datei memberarea.inc.php:


[Hier klicken um die memberarea.inc.php zu sehen]

Diese Datei ist mehr als Platzhalter gedacht. Hier können alle Funktionen platziert werden, die nur angemeldeten Benutzern zur Verfügung stehen. Schließlich die Datei functions.inc.php:


[Hier klicken um die functions.inc.php zu sehen]

Hier sieht man, dass das eigentliche Einloggen nur das Speicher der aktuellen Session ID im Datensatz des Benutzers ist. So kann man den Benutzer auf jeder Seite leicht erkennen. Zum Ausloggen löscht man einfach das SESSION Feld im Datensatz. Ob der Benutzer eingeloggt ist kann man einfach überprüfen, indem man die Tabelle nach allen Datensätzen mit der aktuellen Session ID abfragt.

Die Sessions machen es einem sehr einfach, sachen wie Login-Systeme in PHP zu verwirklichen. Ich hoffe, in diesem Tutorial sind keine Fehler oder Unschönheiten versteckt, wenn dies doch so ist, oder sie einen Verbesserungsvorschlag/Kritik äußern möchten: Hinterlassen sie soch einfach einen Kommentar. Vielen Dank für ihr Interesse! Das Skript kann man übrigens hier herunterladen!

In: ,
— March 24, 2008


Kommentare

(verstecken)
      RSS
  1. Roberto

    April 16, 2009 @15:02:28

    Schade dass es unvollständig ist.

Gib deine Meinung ab!


(notwendig)






Stoppt die Vorratsdatenspeicherung! Jetzt klicken & handeln!Willst du auch bei der Aktion teilnehmen? Hier findest du alle relevanten Infos und Materialien: