Anzeige
Tutorialbeschreibung

PHP - Teil 18 - Ein Login-Skript mit Sessions

PHP - Teil 18 - Ein Login-Skript mit Sessions

Wie sich Daten clientseitig über Cookies speichern lassen, wurde bereits gezeigt. In diesem Video-Training geht es nun um das serverseitige Speichern von Daten. Sessions sind ein hervorragendes Mittel, um Daten während einer Folge von Aufrufen einer Webseite zu speichern. Dazu wird den jeweiligen Benutzern eine eindeutige Session-ID zugewiesen, anhand derer die Benutzer identifiziert werden können. In diesem Video-Training erfahrt ihr, wie ihr mit Sessions ein Login-Skript anlegen könnt.

Icon-Ersteller: Oxygen-Team

... übrigens findest du die komplette Serie hier: PHP-Workshop-DVD - Basics & Tricks - Schnapp sie dir in unserem Shop oder in der Kreativ-Flatrate!


Bei Sesssions werden die Daten in einem temporären Verzeichnis auf dem Server gespeichert. Anders als bei Cookies haben die Benutzer hier keine Möglichkeit, die Sessions zu deaktivieren. Somit könnt ihr euch als Entwickler also darauf verlassen, dass die Sessions bzw. die damit einhergehenden Daten auch tatsächlich zur Verfügung stehen. (Was bei Cookies, wie das im Cookie-Tutorial beschrieben wurde, leider nicht der Fall ist).

Bilder



 
Der Ablauf beim Arbeiten mit Sessions sieht folgendermaßen aus:

• Dem Besucher wird eine Session-ID zugewiesen.
• Sobald die Session gestartet wurde, können Variablen gespeichert und immer wieder aufgerufen werden.

Die grundlegenden Einstellungen für die Arbeit mit Sessions werden in der php.ini vorgenommen. Hier die wichtigsten Optionen:

Session.save_handler – Wie werden die Daten gespeichert?
Session.save_path – Wo werden die Daten gespeichert?
Session.use_cookies – Sollen zum Speichern der Session-IDs Cookies verwendet werden?
Session.name – Das ist der Name der Sitzung. Standardmäßig ist das PHPSESSID.
Session.auto_start – Soll die Session automatisch gestartet werden? In diesem Fall muss die Funktion session_start() nicht gesetzt werden.
Session.cookie_lifetime – Wenn die Session-IDs in Cookies gespeichert werden, kann man hierüber festlegen, wann der Cookie verfällt.
Session.cookie_path – Das ist der Pfad für den Cookie.
Session.cookie_domain – Domain, die dem Cookie zugeordnet wird.
Session.gc_maxlifetime – Anzahl der Sekunden, nach der die Session-Daten gelöscht werden sollen.

Um mit Sessions arbeiten zu können, müssen diese zunächst gestartet werden. PHP stellt dafür eine vordefinierte Funktion zur Verfügung.


<?php
 session_start();
?>

Dabei muss diese Funktion immer als Erstes innerhalb der jeweiligen Datei stehen. Immer dann, wenn eine Session gestartet wurde, wird automatisch die Session-ID generiert. Diese Session-ID genügt, um die Session eindeutig zu identifizieren. Daher genügt es dann eben auch, wenn man eben jene Session-ID an ein Skript übergibt. Das Zielskript kann anhand der Session-ID dann die richtige Session laden.

Nachdem die Session gestartet wurde, legt PHP ein superglobales Array $_SESSION an. Es handelt sich hierbei um ein normales Array, das dann auch wie jedes andere Array verwendet werden kann.

Sessions-Variablen lassen sich folgendermaßen registrieren:

<?php
 $_SESSION['name'] = "wert";
?>

 
Möchte man den hier angegebenen Wert ausgeben, speichert man die Session-Variable üblicherweise in einer Variablen. Im folgenden Beispiel wird genau das gemacht, wobei dann zusätzlich der Wert dieser Variablen ausgegeben wird.

<?php
 $name = $_SESSION['name'];
 echo $name;
?>

Allerdings kann man den Wert der Session-Variable auch direkt verwenden.

<?php
 echo "Hallo ".$_SESSION['name']." Mueller";
?>

Um überhaupt überprüfen zu können, ob eine bestimmte Session-Variable verfügbar ist, solltet ihr die isset()-Funktion verwenden.

<?php
 if (!isset($_SESSION['name'])){
    $_SESSION['name'] = "Michael";
    }
?>

In diesem Beispiel wird überprüft, ob es bereits die Session-Variable name gibt. Ist das nicht der Fall, wird diese registriert.

Explizit löschen lassen sich Sessions folgendermaßen:

<?php
 session_destroy();
?>



 

Eine Login-Funktion umsetzen

Eine der typischsten Anwendungen für Sessions ist zweifellos ein Login-Skript. Mit einem solchen Skript kann man bestimmte Bereiche seiner Webseite mit einem Passwort schützen. Dazu legt man zunächst ein Formular an, über das Benutzername und Passwort abgefragt werden. Dieses Formular speichert die Kombination aus Benutzername und Passwort in einer Session. Die eigentliche Überprüfung wird dann den folgenden Seiten überlassen. Diese Seiten kontrollieren dann jeweils, ob die Benutzername-Passwort-Kombination korrekt ist.

Zunächst das eigentliche Formular.

<body>
 <form action="login1.php" method="post">
 Dein Name: <br />
 <input type="text" name="name" />
 <br />
 Dein Passwort: <br />
 <input type="password" name="pass" />
 <input type="submit" value="Login" />
 </form>
</body>

 
Das Formular besteht im Wesentlichen aus zwei Eingabefeldern und einer Submit-Schaltfläche. Wird diese Schaltfläche angeklickt, ruft das die Seite login1.php auf.

Bilder



 
Innerhalb dieser login1.php werden die übergebenen Werte mit den gewünschten Werten verglichen. Dabei wird in diesem Beispiel der Einfachheit halber das Passwort direkt im Klartext überprüft. Und auch der Benutzername steht direkt in der login.php.

<?php
 session_start();
 $name = $_POST['name'];
 $pass = $_POST['pass'];
 Session_register('eingeloggt');
 $ingeloggt=1;
 if(!isset($name))
    {
    $name = "Gast";
    }
 $_SESSION['username'] = $name;
 echo "Hallo $name <br>
 <a href=login2.php>Weiter</a>";
?>

Innerhalb dieser Datei wird eine Session gestartet. Anschließend wird innerhalb der gestarteten Session die Variable $eingeloggt registriert. Der Wert dieser Variablen wird auf 1 gesetzt. Stimmen eingegebener Benutzername und/oder Passwort nicht, wird die Variable $eingeloggt automatisch auf 0 gesetzt.

 
Am Ende des Skripts gibt es eine Meldung, ob das Anmelden geklappt hat. Ist das der Fall, ist ein Link auf eine weitere Seite zu sehen.

Bilder



 
Anderenfalls gibt es eine Fehlermeldung.

Bilder



 
Auf allen zu schützenden Seiten wird dann folgendes Skript verwendet:

<?php
 session_start(); 
 $eingeloggt = $_SESSION['eingeloggt'];
  if ($_SESSION["eingeloggt"] == '1')
  echo "Du bist immer noch eingeloggt";
  else echo "Bitte einloggen!";
?>

Innerhalb dieser Seite wird nun ganz einfach überprüft, ob der Wert der Variablen $eingeloggt auf 1 gesetzt ist. Ist das der Fall, wird eine entsprechende Meldung angezeigt.

Bilder



 
Anderenfalls ist die Aufforderung zum Einloggen zu sehen.

Bilder



Dieses Skript kann nun auf allen Unterseiten verwendet werden, die ausschließlich mit Benutzername und Passwort erreichbar sein sollen.


 

Sitzungsdaten speichern

Im Zusammenhang mit Sessions sind auch die beiden Funktionen session_encode() und session_decode() interessant. Mit session_encode() lassen sich Session-Daten vollständig auslesen, um diese später wiederzuverwenden. Dabei werden die Variablen und ihre aktuellen Werte in einem String gespeichert. Die so ermittelten Daten könnten dann beispielsweise in einer Datei oder einer Datenbank gespeichert werden.

Im folgenden Skript werden die Daten der gesamten Session ausgelesen und im Browser ausgegeben.

<?php
 session_start();
 $_SESSION['login_ok'] = true;
 $_SESSION['name'] = 'michael';
 $_SESSION['idieid'] = 34;
 $string=session_encode();
 echo $string;
?> 

Das Ergebnis sieht folgendermaßen aus:

Bilder



 
Das Gegenstück zu session_encode() ist session_decode(). Mit dieser Funktion können Strings, die Sitzungsdaten enthalten, dekodiert und wieder in eine Session eingebunden werden. Die gespeicherten Variablen und deren Werte werden dabei automatisch in die Session übernommen.


Fazit

In diesem Tutorial habt ihr gesehen, wie einfach ihr mittels Sessions Benutzerdaten von Seite zu Seite „mitnehmen“ könnt. Abschließend noch einige Worte zum Thema Sicherheit: Auch wenn Sessions keine 100%tige Sicherheit bieten, sind sie doch relativ sicher. Allerdings können Angreifer auf Basis einer entführten Session-ID auf sämtliche Daten zugreifen, die mit der Session-ID verbunden sind. Schwachstellen sind hier in aller Regel die Weitergabe eines URLs, in der eine Session-ID enthalten sind. Ebenso können Session-IDs auch in Logfiles auftauchen.

Einen interessanten Artikel zum Thema Session-Sicherheit findet ihr unter http://www.mathias-bank.de/2008/02/22/php-sicherheit-session-fixierung/.

DVD-Werbung
Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von franzg
  • 15.05.2017 - 00:10

Sehr interessant! Vielen Dank!

Portrait von kleckser*1
  • 07.10.2016 - 12:57

Danke für das Tutorial.

Portrait von Franky28
  • 14.06.2016 - 19:25

hatt mir hat mir sehr geholfen

Portrait von dmtw2107
  • 14.11.2013 - 08:15

danke für das tolle tutorial

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 17.05.2013 - 11:15

danke für das tutorial :)

Portrait von Malhadra
  • 19.01.2013 - 10:55

danke für das informative Tutorial.

Portrait von bennemann8
  • 08.08.2012 - 14:57

auch wenn das Tutorial schon etwas älter ist, immer noch gut und verständlich erklärt..
zu empfehlen ;)

Portrait von markusn9516
  • 18.12.2011 - 12:55

$ingeloggt = 1;
kann das stimmen, oder wird da $eingeloggt = 1; gemeint?

Seite 7

Portrait von Pixelmax
  • 15.11.2011 - 23:50

Finde ich super, ein spannendes Thema. DANKE!

Alternative Portrait

-versteckt-(Autor hat Seite verlassen)

  • 29.08.2011 - 15:13

Herzlichen Dank aus Hannover

Portrait von Freistoss
  • 27.08.2011 - 10:48

Danke für das Tutorial, kurz und knackig.

x
×
×