$_SESSION und $_COOKIE

Geschätzte Lektüre: 7 Minuten 332 Ansichten

Einführung: Warum brauchen wir Sitzungen und Cookies?

Stellen Sie sich vor, Sie betreten ein Hotel:
• Ein Cookie ist wie Ihr Zimmerausweis – eine kleine Karte, die Sie bei sich tragen und die Sie identifiziert
• Eine Session ist wie Ihr Zimmer – ein privater Bereich, wo Ihre Sachen während Ihres Aufenthalts gespeichert bleiben

Im Web sind HTTP-Protokolle von sich aus „zustandslos“ – das bedeutet, jeder Seitenaufruf ist für den Server ein neuer Besucher. $_SESSION und $_COOKIE helfen uns, diesen Zustand zu erhalten.

$_COOKIE – Dauerhafte Erinnerungen

Was sind Cookies?

Cookies sind kleine Textdateien (max. 4KB), die der Browser auf dem Computer des Benutzers speichert. Sie werden bei jedem Seitenaufruf mitgesendet.

Wofür werden Cookies verwendet?

  • Benutzereinstellungen speichern (z.B. Dark-Mode Präferenz)
  • Login-Informationen merken („Angemeldet bleiben“)
  • Tracking (z.B. Analyse des Nutzerverhaltens)

Cookie-Beispiel

// Cookie setzen (läuft in 30 Tagen ab)
setcookie("benutzer_präferenz", "dark_mode", time() + (86400 * 30), "/");

// Cookie auslesen
if(isset($_COOKIE['benutzer_präferenz'])) {
    echo "Ihre Präferenz: " . $_COOKIE['benutzer_präferenz'];
    // Ausgabe: Ihre Präferenz: dark_mode
}

// Cookie löschen
setcookie("benutzer_präferenz", "", time() - 3600, "/");

Cookie-Parameter erklärt

  • name: Name des Cookies („benutzer_präferenz“)
  • value: Wert („dark_mode“)
  • expire: Ablaufdatum (timestamp)
  • path: Gültigkeitsbereich („/“ = gesamte Domain)
  • domain: Gültige Domain
  • secure: Nur über HTTPS senden
  • httponly: Nicht per JavaScript zugänglich (sicherer)

$_SESSION – Temporäre Benutzerdaten

Was sind Sessions?

Eine Session ist ein temporärer Speicher auf dem Server, der einem bestimmten Benutzer zugeordnet ist. Sie wird durch eine Session-ID identifiziert, die typischerweise in einem Cookie gespeichert wird.

Wofür werden Sessions verwendet?

  • Login-Systeme (Benutzer authentifizieren)
  • Warenkorb-Funktionen
  • Temporäre Daten zwischen Seitenaufrufen

Session-Beispiel

// Session starten (immer am Anfang des Scripts)
session_start();

// Session-Variable setzen
$_SESSION['benutzername'] = "max_mustermann";
$_SESSION['login_zeit'] = time();

// Session-Variable auslesen
echo "Willkommen, " . $_SESSION['benutzername'];
echo "Sie sind seit " . date('H:i', $_SESSION['login_zeit']) . " angemeldet.";

// Session zerstören (beim Logout)
session_unset(); // Löscht alle Session-Variablen
session_destroy(); // Zerstört die Session

Unterschiede zwischen $_SESSION und $_COOKIE

Feature$_COOKIE$_SESSION
SpeicherortClient (Browser)Server
GrößeMax. 4KB pro CookieTheoretisch unbegrenzt
LebensdauerManuell einstellbarBis der Browser geschlossen wird (standardmäßig)
SicherheitUnsicher (kann manipuliert werden)Sicher (nur ID wird clientseitig gespeichert)
VerwendungLangfristige PräferenzenTemporäre, sensitive Daten

Praxisbeispiel: Login-System

// login.php
session_start();

if ($_POST['username'] === 'admin' && $_POST['password'] === 'geheim') {
    $_SESSION['eingeloggt'] = true;
    $_SESSION['username'] = $_POST['username'];
    
    // "Angemeldet bleiben" Cookie setzen
    if (isset($_POST['remember_me'])) {
        setcookie("remember_user", $_POST['username'], time() + (86400 * 30), "/");
    }
    
    header("Location: profil.php");
    exit;
}

// profil.php
session_start();

if (!isset($_SESSION['eingeloggt']) {
    // Prüfe "Angemeldet bleiben" Cookie
    if (isset($_COOKIE['remember_user'])) {
        $_SESSION['eingeloggt'] = true;
        $_SESSION['username'] = $_COOKIE['remember_user'];
    } else {
        header("Location: login.php");
        exit;
    }
}

echo "Willkommen in Ihrem Profil, " . $_SESSION['username'];

Sicherheitsaspekte

Session-Sicherheit

Session Hijacking: Verwenden Sie session_regenerate_id() nach einer erfolgreichen Login

session_start();
if (!isset($_SESSION['initiated'])) {
    session_regenerate_id();
    $_SESSION['initiated'] = true;
}

Session Fixation: Setzen Sie immer eine neue Session-ID nach dem Login

Cookie-Sicherheit

• Sensible Daten niemals in Cookies speichern
• Verwenden Sie das secure und httponly Flag:

setcookie("sicherer_cookie", "wert", time() + 3600, "/", "example.com", true, true);

Best Practices

01. Session immer zuerst starten:

// Richtig
session_start();
// Dann erst HTML oder andere Ausgaben

02. Cookies vor der Ausgabe setzen:
Ähnlich wie Sessions müssen Cookies gesetzt werden, bevor irgendwelche Ausgaben an den Browser gesendet werden.

03. Session-Timeout einstellen:

// Session-Lebensdauer auf 1 Stunde setzen
ini_set('session.gc_maxlifetime', 3600);
session_set_cookie_params(3600);
session_start();

04. Sensible Daten in Sessions, nicht in Cookies speichern

Fortgeschrittene Techniken

Session in Datenbank speichern

Für mehr Sicherheit und Skalierbarkeit können Sessions in einer Datenbank gespeichert werden:

class DatabaseSessionHandler implements SessionHandlerInterface {
    // Implementierung der erforderlichen Methoden
}

$handler = new DatabaseSessionHandler();
session_set_save_handler($handler, true);
session_start();

Cookie-Verschlüsselung

function encryptCookie($value) {
    $key = "geheimer_schluessel";
    return openssl_encrypt($value, 'AES-128-ECB', $key);
}

function decryptCookie($value) {
    $key = "geheimer_schluessel";
    return openssl_decrypt($value, 'AES-128-ECB', $key);
}

// Cookie setzen
setcookie("secure_data", encryptCookie("sensibler_wert"), time()+3600, "/");

// Cookie auslesen
if(isset($_COOKIE['secure_data'])) {
    $data = decryptCookie($_COOKIE['secure_data']);
}

Essentielle Werkzeuge

$_SESSION und $_COOKIE sind essentielle Werkzeuge für die Zustandserhaltung in PHP-Anwendungen:

  • Cookies sind ideal für nicht-sensible, langlebige Benutzereinstellungen
  • Sessions sind perfekt für sichere, temporäre Benutzerdaten
Dieses Dokument teilen

$_SESSION und $_COOKIE

Oder Link kopieren

INHALT

Abonnieren

×
Cancel