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: BeispielUsername = User Passwort: passwort
Hier wird es sicherlich noch eine Fortsetzung geben





