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