Login mit Session
Im folgenen Kurs werde ich ein Login mit Session erklären. Eine Session ist sehr Kurzlebig,
und nur eine bestimmte Zeit gültig. Aus diesem Grund kommt es oft zu der Fehlermeldung
Die Sitzung ist abgelaufen, bitte melden sie sich neu an
.
Dieses kann mit Hilfe von Cookies verhindert werden, was ich zu einen späteren Zeitraum mal
erklären werde.
Vorbereitungen
Für unser Login-Script benötigen wir eine Datenbanktabelle mit folgenden Informationen:
Tabelle: user
Feldname | Feldtyp | Erläuterung |
---|---|---|
ID | INT AUTO_INCREMENT PRIMARY KEY | ID-Nr. des Eintrages (wird automatisch vergeben) |
Nick | VARCHAR(30) | Nick des Users |
Pass | VARCHAR(50) | Passwort (wird mit MD5 verschlüsselt) |
VARCHAR(70) | eMail Fü evtl. Passwort-Vergessen Funktion | |
Für den Zugriff auf die Datenbank benötigen wir ein kurze PHP-Datei, die wir am besten in ein
Unterverzeichnis, die wir mit .htaccess schützen, diese binden wir dann mit include
in Ihre PHP-Datei ein. Speichern Sie diese Daten in eine Datei, z.B. zugriff.php in ein.
<?php define("MYSQL_HOST", "localhost"); // Host-Name define("MYSQL_USER", "user"); // Benutzername define("MYSQL_PASS", "passwort"); // Passwort define("MYSQL_DATABASE", "datenbank"); // Datenbank-Name $dblink = mysqli_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS, MYSQL_DATABASE); if (mysqli_connect_errno()) { die('Verbindung fehlgeschlagen'); ?>
Für die Eingabe der Login-Daten, also Nickname und Passwort schreiben wir uns ein kleines Formular und senden diese mit Post ab. Hier mal als PHP, da ich das Script später von erweiter :)
<?php echo "<form method=\"post\" action=\"index.php\">\n"; echo "<table>\n"; echo "<tr><td>Nickname:</td><td><input name=\"a_nick\" type=\"text\" size=\"30\"></td>\n"; echo "<tr><td>Passwort:</td><td><input name=\"a_pass\" type=\"password\" size=\"30\"></td>\n"; echo "<tr><td> </td><td><input type=\"submit\" value=\"Versenden\"></td>\n"; echo "</table>\n"; echo "</form>\n"; ?>
Als nächstes werden die Daten gelesen und mit den Daten in der Datenbank abgeglichen.
Dabei wird das Passwort mit MD5
verschlüsselt. Achte dabei auch, das auch
die Passwörter in der Datenbank mit MD5 verschlüsselt sind.
<?php $nick = $_POST['a_nick']; $pass = md5($_POST['a_pass']); $fehler = "0"; if (empty($nick)) { // Kein Nickname eingegeben $fehler = "A" ; } if (empty($pass)) { // kein Passwort eingegeben $fehler = "A" ; } if ($fehler=="0") { include("zugriff.php"); $sql = "SELECT Nick, Pass FROM users WHERE Nick='$nick'"; $erg = mysqli_query($dblink, $sql); $anz = mysqli_num_rows($erg); if($anz > 0) { $finfo = mysqli_fetch_array($result, MYSQLI_ASSOC); $nick2 = $finfo["Nick"] ; $pass2 = $finfo["Pass"] ; if ($nick == $nick2 and $pass == $pass2) { // einloggen } else { // Passwort falsch $fehler = "B"; } } else { // Nickname nicht gefunden $fehler = "B"; } } ?>
Session
In unseren Script muß oben immer als erstes session_start();
stehen.
Es darf vorher nichts ausgegeben werden.
<?php session_start(); ?>
Als nächstes registrieren wie die Session-Variable
<?php $_SESSION['username'] = $nick; ?>
Zuvor überprüfen wir, ob nicht schon eine Session vorhanden ist. Denn dann brauchen wir sie ja nicht erneut registrieren.
<?php if(!isset($_SESSION['username'])) { $_SESSION['username'] = $nick; } ?>
Nun benötigen wir natürlich auch eine Funktion, um die Session zu löschen. Sozusagen, ein Logout.
<?php session_destroy(); ?>
Das war eigendlich schon das wichtigste - Ein kommplettes Script könnte dann so aussehen
<?php session_start(); $fehler = "0"; $aktion=$_GET['action']; if ($aktion=="logout") { $fehler="A"; session_destroy(); } else { if(!isset($_SESSION['username'])) { $nick = $_POST['a_nick']; $pass = md5($_POST['a_pass']); if (empty($nick)) { // kein Nickname gefunden $fehler = "A" ; } if (empty($pass)) { // kein Passwort gefunden $fehler = "A" ; } if ($fehler=="0") { include("#config.php"); $sql = "SELECT Nick, Pass FROM users WHERE Nick='$nick'"; $erg = mysqli_query($dblink, $sql); $anz = mysqli_num_rows($erg); if($anz > 0) { $finfo = mysqli_fetch_array($erg, MYSQLI_ASSOC); $nick2 = $finfo["Nick"] ; $pass2 = $finfo["Pass"] ; if ($nick == $nick2 and $pass == $pass2) { // einloggen $_SESSION['username'] = $nick; } else { // Passwort falsch $fehler = "B"; } } else { // Nickname nicht gefunden $fehler = "B"; } } } } ?> <!DOCTYPE HTML> <html lang="de"> <head> <title>Login-Seite</title> <meta charset="utf-8"> </head> <body> <h1>Beispielseite Loginsystem</h1> <?php if ($fehler=="0") { echo "<p>Hallo $nick <br> du bist erfolgreich eingeloggt</p>\n"; echo "<p><a href=\"index.php?action=logout\">ausloggen</a></p>\n"; } else { if ($fehler=="A") { echo "<p>Bitte einloggen</p>\n"; } elseif ($fehler=="B") { echo "Name oder Passwort falsch\n"; } echo "<form method=\"post\" action=\"index.php\">\n"; echo "<table>\n"; echo "<tr><td>Nickname:</td><td><input name=\"a_nick\" type=\"text\" size=\"30\"></td>\n"; echo "<tr><td>Passwort:</td><td><input name=\"a_pass\" type=\"password\" size=\"30\"></td>\n"; echo "<tr><td> </td><td><input type=\"submit\" value=\"Versenden\"></td>\n"; echo "</table>\n"; echo "</form>\n"; } ?> </body> </html>Das ganze sieht dann wie folgt aus: Beispiel
Username = User Passwort: passwort
Hier wird es sicherlich noch eine Fortsetzung geben