Session-Management

HTTP als zustandsloses Protokoll

HTTP ist zustandslos

  • Viele Webanwendungen brauchen aber Zustand
    • Warenkorb
    • Assistent für Formulareingabe
    • Komplexe Geschäftsanwendungen
  • Wie kann man mit HTTP Zustand verwalten?
    • Versteckte Formularfelder
    • Cookies
    • PHP-Session-Management

Cookies

  • Cookie wird auf dem Client gespeichert
  • Client kann Cookies verweigern
  • Setzen eines Cookies
    setcookie("name", $value [, $expire = 0, $path, $domain, $secure = false, $httpOnly = false])
    • $value - der zu setzende Wert
    • $expire - das Verfallsdatum als Unix-Timestamp (0 = Session-Cookie)
    • $path - der Pfad für den das Cookie gültig ist
    • $domain - Domain für die das Cookie gültig ist
    • $secure - Cookie darf nur über HTTPS übertragen werden
    • $httpOnly - Cookie darf von JavaScript aus nicht gelesen werden
  • Auslesen eines Cookies
    $value = $_COOKIE["name"]
  • Cookie entfernen
    setcookie("name", "", time() - 100000)

Cookie muss gesetzt werden, bevor Ausgaben zum Browser gesendet wurden (Anfang des Skripts)

Beispiel: Cookies

<?php
  setcookie("seite", "cookie1", time() + 60*60); // 1h gültig
  setcookie("geheimnis", "psst", 0); // Session Cookie
?>
<!DOCTYPE html>
<html>
<head><title>Cookie</title></head>
<body>
  <a href="cookie2.php">Klick mich an!</a>
</body>
</html>
<?php
  setcookie("geheimnis", "", time() - 100000);
?>

<!DOCTYPE html>
<html>
<head><title>Cookie</title></head>
<body>

Du kommst von:       <?= $_COOKIE["seite"] ?><br/>
Unser Geheimnis ist: <?= $_COOKIE["geheimnis"]?><br/>

</body>
</html>

PHP-Session

In der Session können beliebige Daten abgelegt werden

  • Browser bekommt Cookie mit Session-ID
  • Server speichert die Daten lokal (Datenbank oder Festplatte)

Start der Session mit session_start()

  • wenn noch keine Session vorhanden ist, wird sie angelegt
  • ist bereits eine Session vorhanden, werden die Daten geladen
  • jede Seite muss session_start() aufrufen,
  • Abfrage der Session-ID mit session_id() möglich (schlecht!)

Beenden der Session mit session_unset()

  • alle Session-Variablen werden gelöscht
  • Cookie mit Session-ID wird entfernt

Speichern von Daten in der Session

  • schreiben mit $_SESSION["name"] = value;
  • auslesen mit $value = $SESSION["name"];
  • löschen einer Variable mit session_unregister("name");

Beispiel: Session

<?php
  session_start(); // Session initialisieren
  $_SESSION["seite"] = "session1"; // Wert speichern
  $_SESSION["geheimnis"] = "psst"; // Wert speichern
?>

<!DOCTYPE html>
<html>
<head><title>Session 1</title></head>
<body>
  <a href="session2.php">Klick mich an!</a>
</body>
</html>
<?php
  session_start(); // Session initialisieren
?>

<!DOCTYPE html>
<html>
<head><title>Cookie</title></head>
<body>

Du kommst von:       <?= $_SESSION["seite"] ?><br/>
Unser Geheimnis ist: <?= $_SESSION["geheimnis"] ?><br/>
Die Session-ID ist:  <?= session_id() ?><br/>

</body>
</html>

Ablage von Daten

  • Flüchtige lokale Daten (transient data) - Objektattribute
    • nach Ausführung des aktuellen Skripts verschwunden
    • privat für den aktuellen Benutzer
    • z. B. Suchparameter einer Abfrage
  • Sitzungsdaten (session data) - Session Variable
    • während der aktuellen Sitzung mit der Anwendung (timeout)
    • privat für den aktuellen Benutzer
    • z. B. Kundennummer, Inhalt des Warenkorbs
  • Dauerhafte globale Daten (persistent data) - Datenbank
    • unbegrenzte Haltbarkeit
    • öffentlich für alle Sitzungen und alle Benutzer
    • z. B. Liste der Kunden, Liste aller Bestellungen

Copyright © 2025 Thomas Smits