Login Script/Einlogg-Script in PHP: Schritt für Schritt Anleitung

Hier nun im ersten Schritt eine einfache Möglichkeit der Programmierung eines Einlogg-Scripts in PHP. Anhand des Programmablaufplans wird der Programmcode erklärt. Wichtig ist das Verständnis der Abläufe. Mit diesem Wissen kann man später komplexere und sichere Varianten erstellen. Am Ende vom Tutorial gibt es den kompletten PHP-Code.

Programmablaufplan Login Script PHP
Programmablaufplan Login Script nummeriert

Wenn man über ein Login Script nachdenkt, fällt einem als erstes das typische Formular mit „geben Sie hier Benutzername und Kennwort“ ein. Schaut man sich das im Programmablaufplan an, ist dies erst an Punkt 6. Warum? Das Login Script ruft sich selber über das action im Formular auf (siehe bei der Erklärung vom PHP-Code) und überprüft, ob die Eingaben korrekt sind. Sind diese richtig und hat sich der Benutzer authentifiziert, muss kein Formular mehr angezeigt werden. Daher kommen erst die Überprüfung und dann das Formular. Aber schauen wir uns anhand dem Ablaufplan es an.

Wir gehen durch 3-mal den Ablaufplan um uns die verschiedenen Fälle anzusehen:

  • Erster Aufruf des Programms: es wird das Login Formular angezeigt
  • Zweiter Aufruf mit falschen Zugangsdaten
  • Dritter Durchgang mit korrekten Zugangsdaten
erster Aufruf - Formular für Login anzeigen
erster Aufruf - Formular für Login anzeigen

Erster Aufruf des Programms: es wird das Login Formular angezeigt

Im Punkt 0, unserem Start wird die SESSION gestartet. Wir benötigen dieses Kurzzeitgedächtnis, damit der Benutzer nach einmal korrektem einloggen auch eingeloggt bleibt. Hier ist extrem wichtig, dass keinerlei Ausgabe im Browser vor unserem session_start(); erfolgt ist, sonst bekommen wir eine Fehlermeldung. Es darf also weder eine Ausgabe von Seiten von PHP noch von HTML kommen. Daher am besten in die erste Zeile!

Punkt 1: Formulardaten abgesendet

Überprüfung, ob Daten vorliegen, die über das Absenden des Formulars hereinkommen. Das Formular ruft diese Datei (also auch sich selbst) über die Angabe bei action auf und überträgt damit die vom Benutzer eingegebenen Formulareingaben: Benutzername und Kennwort. Beim ersten Aufruf unseres Login-Scripts ist dieser Punkt also immer "Nein" und es wird zu Punkt 5 gesprungen.

<?php
session_start();
if ( isset($_POST['benutzername']) and $_POST['benutzername'] != "" 
     and isset($_POST['kennwort']) and $_POST['kennwort'] != ""  )
{

Im PHP-Code sieht man, dass erst auf die Existenz mit isset überprüft wird. Dies ist in allen aktuellen PHP-Versionen notwendig. Ansonsten erscheint eine Warnung von PHP!

Punkt 5: SESSION gesetzt?

Hier wird kontrolliert, ob sich der Benutzer bereits eingeloggt hat. Dann wäre auch kein Login-Formular notwendig. Nachdem wir zum ersten Mal das Script aufrufen, ist das auch nicht der Fall. Auch hier müssen wir erst kontrollieren, ob die verwendete SESSION[] über erstellt wurde - sprich es wird über isset dies abgesichert.

Punkt 6: Login-Formular anzeigen

Ein typisches HTML-Formular für den Login wird angezeigt. Hier haben wir nur eine Besonderheit! Im HTML-Befehl <form actionaction= der Dateiname übergeben, die unser Einlogg-Script hat. Wer hier sich denkt, warum nicht einfach direkt "einloggen.php" in den Code schreiben und den Umweg über $_SERVER['SCRIPT_NAME']; vermeiden, liegt zum Teil richtig. Langfristig wollen wir diese Login-Script in bestehende Anwendungen und einelne Webseiten durch eine Zeile Code integrieren. Wir wollen also die Funktion universell nutzen - dadurch ist es notwendig, dass der Dateiname ermittelt wird. Durch das Einbinden ist diese Vorgehensweise notwendig. Dazu in einem späteren Kapitel mehr.

Nachdem das Formular angezeigt wurde, wird das PHP-Programm mit exit; komplett beendet. Der Besucher sieht keine geheimen Daten mehr, die nach diesem Programmteil kommen.

Nun füllt der Besucher das Einlogg-Formular aus und sendet dieses ab. Und wir können sehen, was beim zweiten Aufruf abläuft.

zweiter Aufruf - falsche Zugangsdaten
zweiter Aufruf - falsche Zugangsdaten

Zweiter Aufruf: mit falschen Zugangsdaten

Die im ersten Teil beschriebenen Abläufe werden hier nicht mehr ausführlich beschrieben. Also unbedingt auch den ersten Teil lesen ;)

Punkt 1: Formulardaten abgesendet

Nach dem Start (hier wird die SESSION gestartet) kommen wir zu der Abfrage, ob Einloggdaten vorliegen. Der Besucher hat ja bereits in Punkt 1 das Formular ausgefüllt und abgesendet. Nun liegen im ARRAY $_POST Inhalte vor.

Allerdings müssen beide vorliegen, sonst wird unsere Bedingung hier nicht wahr und es wird wieder das Formular angezeigt.

if ( isset($_POST['benutzername']) and $_POST['benutzername'] != "" 
     and isset($_POST['kennwort']) and $_POST['kennwort'] != ""  )
{

Liegen sowohl in "benutzername" wir auch in "kennwort" ein Inhalt vor, sprich sind diese NICHT leer (das ist diese Konstruktion mit Ausrufezeichen und dem Gleichzeichen) geht es weiter zu Punkt 2.

Punkt 2: benutzername und kennwort korrekt

Jetzt werden die vom Besucher eingegebenen Daten mit fest eingetragenen Werten verglichen. Die hier fest eingetragenen Werte "php-kurs.com" als Benutzername und "geheim" als Kennwort dienen zum einfachen Zeigen. Diese können später aus einer Datenbank kommen, in der verschiedene Benutzer mit verschiedenen Rechten hinterlegt sind. Dazu gibt es eine ausführliche Anleitung unter https://www.php-kurs.com/db-datanbankanwendung-mit-php-erstellen.htm - aber erst wollen wir es einfach und dadurch verständlich halten.

Unsere Annahme für den zweiten Durchgang unseres Programmablaufplans ist, dass die vom Besucher eingegebenen Daten falsch sind. Also ist unsere Bedingung nicht richtig und es geht weiter bei Punkt 4.

Punkt 4: benutzername und/oder kennwort war falsch

Eine oder beide Eingaben durch den Besucher waren falsch. Zur Sicherheit wird die SESSION für „eingeloggt“ gelöscht.

Eine Fehlermeldung erscheint und wir kommen zu Punkt 5 und Punkt 6 wie bereits im ersten Durchgang.

dritter Aufruf - korrekte Zugangsdaten und Einloggen
dritter Aufruf - korrekte Zugangsdaten und Einloggen

Dritter Durchgang: mit korrekten Zugangsdaten

Hat der Besucher korrekte Daten in das Formular eingetragen, wird in unserem Punkt 2 die Verzweigung nach 3 genommen.

    if ( 
         $_POST['benutzername'] == "php-kurs.com" 
         AND 
         $_POST['kennwort'] == "geheim"
       )
    {
        $_SESSION['benutzername'] = $_POST['benutzername'];
        $_SESSION['eingeloggt'] = true;
        echo "<b>einloggen erfolgreich</b>";
    }

Punkt 3: einloggen erfolgreich

Durch das korrekte Authentifizieren des Besuchers wird nun die $_SESSION['benutzername'] mit dem Benutzername gesetzt und $_SESSION['eingeloggt'] = true;.

Zusätzlich wir in diesem Punkt eine Ausgabe erfolgen, damit der Besucher lesen kann, dass das Einloggen erfolgreich verlief.

Punkt 5: SESSION $_SESSION['eingeloggt']

Es erfolgt die Kontrolle, ob unsere $_SESSION['eingeloggt'] auf "true" gesetzt ist. Wir wollen hier ein sehr einfaches Login-Script erstellen, daher reicht in hier "true" aus. Wir könnten auch komplexere Werte in dieser SESSION hinterlegen, was dem einfachen Verständnis im Wege stehen würde. Daher halten wir es zum jetzigen Zeitpunkt einfach.

if ( isset($_SESSION['eingeloggt']) and $_SESSION['eingeloggt'] == true )
{
    // Benutzer begruessen
    echo "<h1>Hallo ". $_SESSION['benutzername'] . "</h1>";
}

Punkt 7: alles Gut

Ist diese Abfrage also "wahr", dann wird der Benutzer begrüßt. Die Begrüßung könnten wir auch schon im Punkt 3 machen. Wichtig ist, dass unser Programm nun weiterläuft und hier kein Abbruch erfolgt wie bei Punkt 6. Es kann nun der Programmcode erfolgen, der nur für berechtigte und korrekt eingeloggte Nutzer bestimmt ist.

Das war der Einstieg in Login-Scripte. Jetzt können wir es nach Belieben komplexer machen wie beispielweise die Zeit mitführen und bei Inaktivität (z.B. 10 Minuten nichts gemacht) wieder ein Einloggen fordern. Viel Spaß beim Spielen und Testen!

folgend der komplette PHP-Code

PHP-Quellcode: Lösung Einlogg-Script
<?php
session_start();
 
if ( isset($_POST['benutzername']) and $_POST['benutzername'] != "" 
     and isset($_POST['kennwort']) and $_POST['kennwort'] != ""  )
{
    // Kontrolle, ob Benutzername und Kennwort korrekt
    // diese werden i.d.R. aus Datenbank ausgelesen
    if ( 
         $_POST['benutzername'] == "php-kurs.com" 
         AND 
         $_POST['kennwort'] == "geheim"
       )
    {
        $_SESSION['benutzername'] = $_POST['benutzername'];
        $_SESSION['eingeloggt'] = true;
        echo "<b>einloggen erfolgreich</b>";
    }
    else
    {
        echo "<b>ungültige Eingabe</b>";
        $_SESSION['eingeloggt'] = false;
    }
}
 
if ( isset($_SESSION['eingeloggt']) and $_SESSION['eingeloggt'] == true )
{
    // Benutzer begruessen
    echo "<h1>Hallo ". $_SESSION['benutzername'] . "</h1>";
}
else
{
    // Einloggformular anzeigen
    echo "<h1>Bitte loggen Sie sich ein";
 
    $url = $_SERVER['SCRIPT_NAME'];
    echo '<form action="'. $url .'" method="POST">';
    echo '<p>Benutzername:<br>';
    echo '<input type="text" name="benutzername" value="">';
    echo '<p>Kennwort:<br>';
    echo '<input type="password" name="kennwort" value="">';
    echo '<p><input type="Submit" value="einloggen">';
    echo '</form>';
 
    // Programm wird hier beendet, denn Benutzer ist noch nicht
    // eingeloggt
    exit;
}

// hier kommt Programmteil/Datenausgabe für berechtige Benutzer ...
?>