php-resource.de

PHP Tutorial: Login mit Hilfe von PHP und mySQL

Dieses Tutorial soll die Grundzüge eines Login-Systems auf der Basis von PHP und mySQL unter Zuhilfenahme von Sessions klären.

|27.07.2003 | razorblade | 1303017 | KAT : PHP | | Kommentare 2


2

6

Die Tabelle

Theoretisch kann der Webmaster auswählen, ob er die Daten aller Benutzer in einer Tabelle haben will, oder ob er für jeden Benutzer eine separate Tabelle anlegen will.
Logisch ist es, nur eine Tabelle zu verwenden, da zusammengehörige Daten gleicher Struktur auch an einer zentralen Stelle gesammelt werden sollten. Praktisch ist es auch, da so eine spätere Modifikation oder Erweiterung der Datenstruktur unabhängig von der Anzahl an Benutzern nur für eine Tabelle vorgenommen werden muss.

Bei der Überlegung, welche Spalten in der Tabelle enthalten sein sollen, muss unterschieden werden zwischen:

  1. Notwendige Spalten

  2. Optionale Spalten

  3. Zusatzspalten (Die Kür)

Und natürlich findet sich hier auch das SQL-Statement, um die Tabelle tatsächlich zu erstellen.

Notwendige Spalten Um sich einzuloggen, gibt der Benutzer unseres Systems seinen Namen und sein Passwort an Da wir den Benutzer also anhand dieser Daten identifizieren, müssen wir zwingend diese beiden Spalten in unserer Tabelle bereitstellen.

Da wir den Namen des Benutzers nutzen, um ihn zu identifizieren, darf es nicht mehrere Benutzer geben, die den gleichen Namen in unserem System verwenden. mySQL hilft uns hier, da es die Eigenschaft UNIQUE zur Verfügung stellt.

Daraus folgt, dass wir zwingend zwei Spalten brauchen:

  1. Name des Benutzers, mit dem er im System agieren will (vergleichbar dem Nickname in einem Forum wie dem vBulletin)

  2. Das Passwort des Benutzers

Optionale Spalten

Nachdem wir jetzt alle Felder haben, die wir unbedingt brauchen, kommen jetzt die Spalten, die empfehlenswert, weil komfortabel sind.

Wie oben bereits geschrieben, wollen wir Sessions verwenden.
Da wir die Session immer starten müssen, können wir nicht davon ausgehen, dass sich hinter jeder Session ein eingeloggter Benutzer verbirgt.
Was spricht also dagegen, die Tabelle um eine Spalte für die ID der Session des Benutzers zu erweitern?
Bei nicht eingeloggten Benutzern steht in der entsprechenden Spalte natürlich nichts.

Natürlich könnte nach erfolgreichem Anmelden eine Variable in der Session registriert werden und dann nur diese abgefragt werden, aber die Variante wie wir sie hier machen, ist meiner Meinung nach besser, weil sie flexibler im Hinblick auf Erweiterungen wie z. B. Rechtevergabe und -entzug ist.

Mit Hilfe dieser Spalte kann natürlich auch festgestellt werden, welche Benutzer momentan eingeloggt sind und welche nicht.

Um uns (auch und vor allem) im Hinblick auf eine einfache Verwendung der Tabelle mitsamt der darin enthaltenen Benutzer die Arbeit zu erleichtern, wäre es vorteilhaft, die Zahl der notwendigen Spalten, um einen Benutzer eindeutig zu identifizieren, zu minimieren und den Inhalt dieser Spalte so klein wie nur irgend möglich zu halten.
Eingeloggte Benutzer können anhand ihrer eindeutigen Session-ID identifiziert werden, aber da nicht immer alle Benutzer eingeloggt sind, scheidet die Spalte aus.
Jeder Benutzer kann über seinen eindeutigen Namen im System identifiziert werden, aber ich persönlich bevorzuge eine weitere Spalte. Diese Spalte beinhaltet die interne ID des Benutzers. Die ID ist eine eindeutige Zahl, anhand derer ein Benutzer ganz zweifelsfrei und unproblematisch identifiziert werden kann.

Ebenfalls zu empfehlen ist eine Spalte, die die Email-Adresse des Benutzers beherbergt.
Mit Hilfe der Email-Adresse können Benutzer über wichtige Änderungen informiert werden und außerdem kann die Email-Adresse zur Verifikation der Existenz des Benutzers genutzt werden.

Daraus folgt, dass wir noch die folgenden Spalten in die Tabelle aufnehmen:

  1. Benutzer-ID (diese Spalte wird als Primärschlüssel verwendet)

  2. Session-Spalte, die die Session-ID eines momentan eingeloggten Benutzers beinhaltet

  3. Mail-Spalte, die die Email-Adresse des Benutzers enthält

Zusatzspalten (Die Kür)

Hier ein kleiner Ausblick auf mögliche Erweiterungen:

  1. Account-Freischaltung anhand eines Aktivierungslinks an die gespeicherte Email-Adresse

  2. Anzahl fehlerhafter Login-Versuche (ggf. inklusive Sperren des Accounts und Zusenden eines neuen Passwortes bei Überschreitung eines Limits)

  3. Prüfen, ob ein Benutzer gesperrt ist (ggf. auch warum)

  4. Prüfen, ob ein Benutzer seinen Account aktiviert hat (kann zur Prüfung der Email-Adresse verwendet werden)

  5. Zeitpunkt des Einloggens

  6. Zeitpunkt der letzten Aktion

  7. Zeitpunkt des Ausloggens

  8. Spalte mit Benutzerlevel

  9. Benutzer in verschiedene Gruppen einteilen

  10. ...

Das SQL-Statement

Folgendes SQL-Statement erstellt die Tabelle inklusive der notwendigen und optionalen Felder:

CREATE TABLE users ( UserID int(11) PRIMARY KEY auto_increment, UserName varchar(30) NOT NULL default '', UserPass varchar(32) NOT NULL default '', UserSession varchar(32), UserMail varchar(150) NOT NULL default '', UNIQUE KEY NickName (UserName), UNIQUE KEY UserMail (UserMail) )

PRIMARY KEY besagt, dass die Spalte UserID der Primärschlüssel der Tabelle ist, also jeden Datensatz eindeutig identifiziert. auto_increment besagt, dass der Wert dieser Spalte automatisch um 1 erhöht wird,wenn ein neuer Benutzer angelegt wird, d. h. die Datenbank kümmert sich selbst darum, dass die Eindeutigkeit gewährleistet bleibt. Toll, oder?

UNIQUE KEY besagt, dass die Datenbank auch von alleine darauf achtet, dass in der Spalte, die zwischen den Klammern steht, kein Wert doppelt eingetragen wird.

Und so sieht die Tabelle aus:

Field Type Null Key Default Extra
UserID int(11)   PRI NULL auto_increment
UserName varchar(30)   UNI    
UserPass varchar(32)        
UserSession varchar(32) YES   NULL  
UserMail varchar(150)   UNI    

Das Passwort

Hier kommt jetzt kein Hinweis darauf, dass Passwörter wie geheim, 007, passwort, der Geburtstag des Kanarienvogels rückwärts nicht empfehlenswert sind.

Ganz allgemein sollte man aber sagen:

  • je länger das Passwort, desto sicherer.

  • Groß- und Kleinbuchstaben, Sonderzeichen und Ziffern sollten alle verwendet werden.

Akzeptabel wäre zum Beispiel ein Passwort mit 6 Zeichen Läge, dass aus Buchstaben, Ziffern und Sonderzeichen besteht, aber eine dahingehende Prüfung hat mit dem eigentlichen Thema nicht direkt zu tun. Diese kleine Ausführung ist mehr als Anregung und Gedankenanstoß zu sehen.

Worauf ich eigentlich hinaus wollte, war:

Das Passwort wird in der Tabelle verschlüsselt

So kann niemand (wirklich niemand) das Passwort eines Benutzers auslesen.
Selbstverständlich muss das vom Benutzer eingegebene Passwort ebenfalls verschlüsselt werden, bevor wir es mit dem in der Tabelle abgleichen können.

Zum verschlüsselten Speichern verwenden wir eine Funktion, die uns SQL zur Verfügung stellt.
Ihr Name lautet MD5.
Die Funktion werden wir beim Anlegen des Beispielbenutzers und beim Einloggen in Aktion sehen.

Der Beispielbenutzer

Damit wir später auch kontrollieren können, ob unser Login funktioniert, legen wir jetzt einen Benutzer in unserem System an.
Der Benutzer wird folgende Daten haben:

Tabellenspalte Wert
UserID ?
irrelevant, da die Spalte von der Datenbank
automatisch befüllt wird
UserName admin
UserPass tutorial
UserSession NULL
wird nicht angegeben, da NULL laut unserer
Tabellendefinition der Standardwert ist
UserMail mrhappiness@inter.net

Daraus ergibt sich folgendes SQL-Statement:

INSERT INTO users SET UserName='admin', UserPass=MD5('tutorial'), UserMail='mrhappiness@inter.net'

Danach sieht unsere Tabelle so aus:

UserID UserName UserPass UserSession UserMail
1 admin 0575c8d592fb7b088226750aceec2b4e NULL mrhappiness@inter.net

Wie man unschwer erkennen kann, haben wir als Passwort tutorial verwendet, aber stattdessen steht auf einmal 0575c8d592fb7b088226750aceec2b4e in der Spalte UserMail. Diese Umwandlung hat die bereits erwähnte SQL-Funktion MD5 erledigt.

Navigation -> Seitenanzahl : (6)

  «  1 2 3 4 5 6  » 
Kommentare zum Tutorial
Tutorial kommentieren
 
08.09.2012 10:11:10 Super Tutorial, vielen Dank für die Mühe! Könnte man den Teil mit dem Verschlü ...
15.03.2010 06:39:54 Hey superklasse dein Tutorial! Da steht alles drin was man über PHP als Einsteiger mit progr ...

Alle Kommentare anzeigen ...
 
Über den Autor
razorblade

razorblade

Status
Premium Mitglied

Beruf
Unbekannt

Mitglied seit:
30.04.2009

letzte Aktivität
04.06.2009

 

Tutorial bewerten

Hat Ihnen dieses Tutorial gefallen? Dann bewerten Sie es jetzt! Fünf Sterne bedeutet "Sehr gut", ein Stern "Unzureichend".



 

aktuelle Artikel

Die RIGID-FLEX-Technologie

Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Neu | Berni

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Neu | Berni