PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Sessions

10. Februar 2020
  1. Home
  2. »
  3. PHP Tutorial
  4. »
  5. Sessions

HTTP ist ein zustandsloses Protokoll, das bedeutet, Informationen werden zwischen den verschiedenen Aufrufen eines Besuchers nicht zwischengespeichert. Dies ist natürlich unpraktisch wenn wir gewisse Informationen zu einem Besucher speichern müssen, beispielsweise mit welchem Benutzernamen sich dieser eingeloggt hat. Um dies zu lösen, verwendet man in PHP Sessions .

Inhaltsverzeichnis

  • 1 Technischer Hintergrund
  • 2 Sicherheit
  • 3 Erste Schritte - Sessions registrieren
  • 4 Überprüfen ob Session-Variable registriert ist
  • 5 Sessions löschen
  • 6 Längeres Beispielscript mit Sessions

Technischer Hintergrund

Mit Sessions hat man die Möglichkeit, bestimmte Daten während einer Folge von Aufrufen eurer Website festzuhalten. Jedem Besucher wird dazu eine einzigartige Session-ID zugeordnet, eine mögliche Session-ID könnte wie folgt aussehen: dadafb244bbcb4bb84116d38f0ebd077. Diese Session-ID wird vom Browser des Besuchers bei jedem Seitenaufruf erneut an den Webserver gesendet, so dass der Webserver die Möglichkeit hat, den Besucher zu identifizieren und Werte von vorherigen Seitenaufrufen zu laden. Die Session-ID wird vom Browser dabei entweder als GET-Parameter an die URL angehängt oder beim Besucher lokal in einem Cookie gespeichert. Das Speichern als Cookie ist aus Sicherheitsgründen zu bevorzugen und wird von PHP auch präferiert. Als Webentwickler muss man sich zum Glück häufig nicht um die Weitergabe der Session-ID kümmern, PHP nimmt uns dort eigentlich die gesamte Arbeit ab.

Auf dem Server ist dann für jede Session-ID lokal ein Speicher eingerichtet, der beliebige Variablen für den Besucher beinhalten kann. So können wir in der Session für einen Besucher beispielsweise abspeichern, mit welchem Benutzernamen sich dieser eingeloggt hat, welche Waren in seinem Warenkorb liegen usw.

Der Benutzer hat keine Möglichkeiten, die Variablen in seiner Session zu sehen oder zu manipulieren. Er besitzt nur die Information, welche Session ID ihm vom Webserver zugewiesen wurde.

Sicherheit

Sessions bieten zwar keine 100%ige Sicherheit, dennoch sind sie relativ sicher. Bei jedem Seitenaufruf teilt der Browser dem Webserver mit, welche Session-ID dieser besitzt. Nun kann ein böswilliger Besucher seine Session-ID einfach manipulieren und könnte die Session-ID von einem anderen Besucher angeben. Der Dieb könnte sich so als jemand anderes in einer Community ausgeben.

Wie bekommt der Angreifer denn die Sesion ID heraus?
Wie eingangs erwähnt werden Session-IDs entweder über die URL mittels dem Parameter ?PHPSESSID übergeben oder als Cookie beim Besucher gespeichert. Sollten die Session-IDs per URL übertragen werden, dann kann es passieren dass der Benutzer diese URL kopiert und beispielsweise diese per E-Mail oder Facebook an Freunde und Bekannte weitersendet. Rufen die Freunde dann den Link auf, so benutzen diese die Session-ID weiter und sind mit einem anderen Account eingeloggt. Dies ist gerade problematisch, wenn man den Link auf einer öffentlichen Seite postet.

Werden stattdessen Cookies verwendet, was der Standard ist und bei allen Besuchern passiert die nicht explizit Cookies deaktiviert haben, muss der Angreifer an diesen Cookie gelangen um die Session zu stehlen. Dies geht beispielsweise über einen Trojaner auf dem Rechner oder über das Abhören der Leitung.

Session ID durch Zufall erraten
Natürlich kann der Dieb auch eine Session-ID erraten, allerdings ist dies sehr unwahrscheinlich. Es ist wahrscheinlicher, dass im Lotto mehrmals hintereinander die gleichen Zahlen gezogen werden als eine Session ID per Zufall zu erraten. Darum sollte wir uns eigentlich keine Sorgen machen.

Zusammenfassend ist zu sagen, dass Sessions schon recht sicher sind und wir uns um den Diebstahl einer Session-ID meistens keine Sorgen machen müssen. Sehr kritische Operationen, wie z.B. das Löschen des Accounts oder ähnliches, sollten aber mit einer zusätzlichen Passwortabfrage nochmals gesichert sein.

Erste Schritte - Sessions registrieren

Möchten wir in einem Script auf Sessions zurückgreifen, müssen wir, bevor wir irgendeine Ausgabe machen, den Befehl session_start(); aufrufen:

1
2
3
<?php
session_start();
?>

Es empfiehlt sich, diesen Code immer ganz oben der Scripts stehen zu haben. Falls ihr die Fehlermeldung Cannot send session cookie - headers already sent by erhaltet, dann gab es irgendwo vor session_start() eine Ausgabe. Eine leere Zeile oder sogar ein Leerzeichen vor <?php reichen bereits aus.

Möchten wir einen Wert / eine Variable über mehrere Seitenaufrufe hinweg in der Session speichern, dann geht dies wie folgt:

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

Diesen Wert können wir später, auch auf anderen Seiten, wie folgt ausgeben:

1
2
3
4
<?php
$name = $_SESSION['name'];
echo $name;
?>

Wichtig, immer wenn ihr irgendwo mit Sessions arbeitet, muss zuvor session_start() ausgeführt worden sein. Probiert es aus, speichert in seite1.php einen Wert in eine Session und gebt dann in seite2.php diesen Wert wieder aus.

Ihr könnt dabei die Session-Variable wie jede andere Variable in PHP verwenden. Ihr könnt darin Zahlen, Zeichenketten oder sogar Arrays abspeichern.

Überprüfen ob Session-Variable registriert ist

Oft empfiehlt es sich zu überprüfen, ob eine gewisse Session-Variable bereits registriert wurde. Dies geht mittels der Funktion isset($variable) :

1
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
 
 
if (!isset($_SESSION['visited'])) {
   echo "Du hast diese Seite noch nicht besucht";
   $_SESSION['visited'] = true;
} else {
   echo "Du hast diese Seite zuvor schon aufgerufen";
}
?>

Hier wird zuerst überprüft ob es die Session-Variable schon gibt. Falls es sie nicht gibt, wird sie registriert.

Würden wir anstatt !isset nur isset schreiben, könnten wir überprüfen, ob die Session registriert wurde. Dies lässt sich bei Logins verwenden:

1
2
3
4
5
6
7
8
9
10
<?php
session_start();
 
 
if (isset($_SESSION['username'])) {
   echo "Herzlich Willkommen ".$_SESSION['username'];
} else {
   echo "Bitte erst einloggen";
}
?>

Sessions löschen

Um alle Session-Daten der Sitzung zu löschen verwendet man session_destroy() :

1
2
3
<?php
session_destroy();
?>

Dieser Befehl löscht alle Daten der Session und kann nützlich sein wenn sich der Benutzer z.B. aus eurem System ausloggen möchte. Denkt dran, ihr müsst zuvor session_start() ausführen bevor ihr session_destroy() ausführen könnt.

Um eine einzelne Session-Variablen zu löschen könnt ihr unset($variable) verwenden:

1
2
3
<?php
unset($_SESSION['name']);
?>

Dieser Befehl löscht die Werte für die Session-Variable name. Hier ein kleines Beispiel:

1
2
3
4
5
6
7
8
9
10
11
<?php
session_start();
 
if(isset($_SESSION['besucht'])) {
  echo "Du hast die Seite zuvor besucht";
  unset($_SESSION['besucht']);
} else {
  echo "Du hast die Seite zuvor NICHT besucht";
  $_SESSION['besucht'] = true;
}
?>

Dieses Script springt bei jedem Aufruf zwischen den zwei Varianten hin und her.

Längeres Beispielscript mit Sessions

Um das gesamte Konzept von Sessions etwas verständlicher zu machen, folgt zum Abschluss noch ein kleines Beispiel. In einem Formular wird der Besucher seinen Namen eingeben können, es wird einen internen Bereich mit mehreren Seiten geben und eine Seite für den Logout.

formular.html:

1
2
3
4
5
<form action="login.php" method="post">
Dein Name: <br />
<input type="Text" name="name" />
<input type="Submit" />
</form>

login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
session_start(); //Nicht vergessen
$name = $_POST['name'];
 
if(!isset($name) OR empty($name)) {
   $name = "Gast";
}
 
//Session registrieren
$_SESSION['username'] = $name;
 
//Text ausgeben
echo "Hallo $name <br />
<a href=\"seite2.php\">Seite 2</a><br />
<a href=\"logout.php\">Logout</a>";
?>

seite2.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
session_start(); //Ganz wichtig
 
if(!isset($_SESSION['username'])) {
   die("Bitte erst einloggen"); //Mit die beenden wir den weiteren Scriptablauf  
}
 
//In $name den Wert der Session speichern
$name = $_SESSION['username'];
 
//Text ausgeben
echo "Du heißt immer noch: $name
<a href=\"logout.php\">Logout</a>";
?>

logout.php:

1
2
3
4
5
<?php
session_start();
session_destroy();
echo "Logout erfolgreich";
?>

Dies ist ein ganz simples Beispiel, zeigt aber gleich die Stärke von Sessions. Bei dem Formular geben wir unseren Namen an, diese Daten werden dann an login.php gesendet. Dort werden sie abgefragt und der name aus dem Formular wird in der Session username gespeichert. Wenn wir dann auf den Link klicken und auf seite2.php gelangen, so können wir dort weiter den Namen des Besuchers (der Name aus dem Formular) ausgeben. Dies könnte man über beliebig viele Seiten weiterführen, mit unbegrenzt vielen Session-Variablen.

Autor: Nils Reimers
Zurück: Suchen und Ersetzen
Weiter: Eigene Funktionen

PHP Tutorial

  • Installation
  • Webspace
  • Erste Schritte
  • Text ausgeben per echo
  • Kommentare
  • Variablen
  • Rechnen mit Variablen
  • $_GET und $_POST
  • if-Anweisungen
  • Vergleichsoperatoren
  • Logische Operatoren
  • Übungsaufgaben
  • while-Schleife
  • for-Schleife
  • Arrays
  • Dateien lesen
  • Dateien schreiben
  • Datum und Uhrzeit
  • E-Mails mit PHP versenden
  • Suchen und Ersetzen
  • Sessions
  • Eigene Funktionen
  • Andere PHP Dateien einbinden
  • Dateiupload
  • Cookies
  • Konstanten
  • Reguläre Ausdrücke
  • Überblick: Wichtige PHP Funktionen
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur

Hoster – Geringste Ausfallzeit

  1. netcup Ø 0 Min.
  2. webgo Ø 0 Min.
  3. Linevast Ø 3 Min.
  4. All-Inkl.com Ø 3 Min.
  5. checkdomain Ø 5 Min.
  6. dogado Ø 6 Min.
  7. Strato Ø 8 Min.
  8. manitu Ø 10 Min.
  9. 1&1 Ø 10 Min.
  10. DomainFactory Ø 14 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2025

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}