Ich habe mich dazu entschlossen, PHP und dessen Möglichkeiten näher zu untersuchen. Hierfür habe ich mich für ein Thema entschieden, welchem man nahezu jeden Tag begegnet. Das Einloggen auf Webseiten.
Ich werde im folgenden auf die theoretischen Grundlagen des Codes eingehen. Der erarbeitete Code ist natürlich nur ein einfacher Code. „Richtige“ Webseiten haben meist einen Komplexeren Code auf der Einlog-Seite.
Grundlagen für das Thema
Zunächst einmal muss man verstehen, wie der Ablauf beim Einloggen auf eine Webseite aussieht. Schießlich muss man für alle Möglichkeiten eine Option im Code vorhalten.

Wenn man eine Login-Seite aufruft. Kommt normalerweise, direkt die Aufforderung, Benutzername und Passwort einzugeben. In der oben dargestellten Grafik kommt dieser Punkt jedoch erst an sechster Stelle.
Warum erst so spät? Das Login-Script ruft sich selber über das action im Formular auf und überprüft, ob die Eingaben korrekt sind. Sind diese richtig, hat der Benutzer seine Identität schon bestätigt und muss nicht noch einmal das Formular ausfüllen. Daher kommen erst die Überprüfung und dann das Formular.
Es gibt im oben gezeigten Ablaufplan drei mögliche Fälle. Dazu muss das Script auch drei mal aufgerufen werden:
- Erster Aufruf des Programms: es wird das Login Formular angezeigt
- Zweiter Aufruf mit falschen Zugangsdaten
- Dritter Durchgang mit korrekten Zugangsdaten
Erster Aufruf des Programms: es wird das Login Formular angezeigt
Im Punkt 0, unserem Start wird die SESSION gestartet. Mit Sessions gibt es die Möglichkeit, Informationen, Daten und Zustände während einer kompletten Nutzungsdauer eines Besuchers zu merken. Diese werden dann in sogenannten Sessions gespeichert, auf die von PHP unabhängig, auf welchem Programmteil diese „gemerkt“ wurde, wieder zugegriffen werden kann.
Wir benötigen dieses Kurzzeitgedächtnis, damit der Benutzer eingeloggt bliebt, wenn er sich zuvor schon eingeloggt hat. 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.
Punkt 1: Formulardaten abgesendet
Zunächst wird überprüft, ob bereits Formulardaten vorliegen. Da beim ersten Aufruf des Login-Scripts noch keine Formulardaten vorhanden sind, 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'] != "" )
{
Der oben abgebildete PHP-Teilcode zeigt, 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?
Wie schon gesagt wird dann zu Punkt 5 gesprungen. 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[] überhaupt erstellt wurde – das wird auch mit isset abgefragt.
if ( isset($_SESSION['eingeloggt']) and $_SESSION['eingeloggt'] == true )
{
Punkt 6: Login-Formular anzeigen
Jetzt wird ein typisches HTML-Formular für den Login angezeigt. Hier haben wir nur eine Besonderheit! Im HTML-Befehl <form action... wird der Dateiname übergeben, die unser Einlogg-Script hat. Theoretisch könnte man hier auch direkt z.b. „einloggen.php“ in den Code schreiben und den Umweg über $_SERVER['SCRIPT_NAME']; vermeiden. Langfristig soll das Login-Script allerdings in bestehende Anwendungen und einzelne Webseiten durch eine Zeile Code integriert werden. Wir wollen also die Funktion universell nutzen – dadurch ist es notwendig, dass der Dateiname ermittelt wird.
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.
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;
}
Zweiter Aufruf: mit falschen Zugangsdaten
Schauen wir uns nun den zweiten Aufruf an. Im Folgenden werde ich die Schritte, die schon zuvor genannt wurden, nur noch oberflächlich erklären.
Punkt 1: Formulardaten abgesendet
Da der Besucher schon beim ersten Aufruf das Formular ausgefüllt hat, liegen im ARRAY $_POST die Formulardaten vor.
Allerdings müssen beide vorliegen, sonst wird unsere Bedingung hier nicht wahr und es wird wieder das Formular angezeigt.
Es müssen allerdings beide (Benutzername und Passwort) vorliegen, damit die Bedingung im Code erfüllt wird.
if ( isset($_POST['benutzername']) and $_POST['benutzername'] != ""
and isset($_POST['kennwort']) and $_POST['kennwort'] != "" )
{
Liegen beide vor, bzw. sind beide Felder nicht leer, geht es weiter zu Punkt 2.
Punkt 2: Benutzername und Passwort korrekt?
Jetzt werden die vom Besucher eingegebenen Daten mit fest eingetragenen Werten verglichen. Also den hinterlegten, richtigen Einloggdaten. Ich werde einfach „erik“ und „passwort“ als richtige Zugangsdaten (Benutzername und Passwort) verwenden. Diese Zugangsdaten sind in einer Datenbank (DB) hinterlegt, in der auch andere Benutzer mit verschiedenen Rechten hinterlegt sein können. Mit dem Anlegen dieser DB habe ich mit allerdings nicht befasst.
Die Annahme für den zweiten Durchgang des Einlogg-Scripts ist, dass die vom Besucher eingegebenen Daten falsch sind. Also ist die Bedingung nicht richtig und es geht weiter bei Punkt 4.
if (
$_POST['benutzername'] == "erik"
AND
$_POST['kennwort'] == "passwort"
)
Punkt 4: Benutzername und/oder Passwort war falsch
Eine oder beide Eingaben durch den Besucher sind falsch. Zur Sicherheit ist es sinnvoll, die aktuelle Session für „eingeloggt“ zu löschen.
Eine Meldung mit dem Text „Falsche Zugangsdaten“ oder so ähnlich erscheint und wir kommen zu Punkt 5 und Punkt 6 wie bereits im ersten Durchgang.
else
{
echo "<b>ungültige Eingabe</b>";
$_SESSION['eingeloggt'] = false;
}
Dritter Durchgang: mit korrekten Zugangsdaten
Hat der Besucher korrekte Daten in das Formular eingetragen, wird in bei Punkt 2 die Verzweigung nach Punkt 3 genommen.
So sähe dafür der Code aus:
if (
$_POST['benutzername'] == "erik"
AND
$_POST['kennwort'] == "passwort" //stimmen beide Angaben?
)
{
$_SESSION['benutzername'] = $_POST['benutzername'];
$_SESSION['eingeloggt'] = true; //Session "eingeloggt" wird auf true gesetzt
echo "<b>einloggen erfolgreich</b>";
}
Punkt 3: LogIn erfolgreich
Durch das korrekte Authentifizieren des Besuchers wird nun die $_SESSION['benutzername'] mit dem Benutzername gesetzt und $_SESSION['eingeloggt'] = true;.
Zusätzlich kann an diesem Punkt eine Ausgabe erfolgen, damit der Nutzer lesen kann, dass das Einloggen erfolgreich war.
Punkt 5: SESSION $_SESSION[‚eingeloggt‘]
Es erfolgt die Kontrolle, ob unsere $_SESSION[‚eingeloggt‘] auf „true“ gesetzt ist. Da das Beispiel nur einen einfachen Login-Code darstellt, reicht in hier „true“ aus.
if ( isset($_SESSION['eingeloggt']) and $_SESSION['eingeloggt'] == true ) //Abfrage, ob Session auf true steht
{
// Benutzer begruessen
echo "<h1>Hallo ". $_SESSION['benutzername'] . "</h1>";
}
Punkt 7: Alles hat geklappt
Ist diese Abfrage also „true“, wird der Benutzer begrüßt. Die Begrüßung wäre auch schon bei Punkt 3 möglich. Allerdings kann das Programm auch nach Punkt 3 abgebrochen werden, weshalb eine frühe Begrüßung nicht sinnvoll wäre.
Kompletter Code:
Im folgenden ist der komplette Code zu finden, der aus den einzelnen Bestandteilen zusammensetzt wurde. Die Erläuterungen sind unter den Kommentaren im Code zu finden:
<?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'] == "erik"
AND
$_POST['kennwort'] == "passwort"
)
{
$_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 ...
?>
Fazit
Das Einloggen auf Webseiten ist eine Sache, welche im Alltag häufig vorkommt. Egal ob man auf diversen Webseiten etwas bestellen möchte, oder ob man einfach nur einen speziellen Inhalt einer Seite mit einem Kennwort schützen möchte.
PHP und die Funktionsweise waren mir vor den Vorlesungen nur beschränkt bekannt. Jedoch haben die Vorlesungen über PHP mein Interesse geweckt, weshalb ich mich gern näher mit diesem Thema befasst habe. Und auch hier fiel meine Wahl auf ein Thema, welches auch wirklich Anwendung findet und nicht nur von theoretischer Natur ist.