Start · Sprachen · PHP · Referenz · session_abort

session_abort

Funktion

Verwirft alle Änderungen am <code>$_SESSION</code>-Array und beendet die Session, ohne die Daten zu speichern.

seit PHP 5.6.0 Kategorie: http

Signatur

session_abort(): bool

Beschreibung

session_abort() beendet die aktuelle Session-Sitzung und stellt den ursprünglichen Zustand der Session-Daten wieder her, so wie sie beim Start der Session vorlagen. Alle Änderungen, die während des aktuellen Requests an $_SESSION vorgenommen wurden, werden verworfen und nicht in den Session-Speicher zurückgeschrieben.

Dies ist besonders nützlich, wenn eine Session lediglich lesend genutzt wird und keine Schreibvorgänge beabsichtigt sind. Da PHP Sessions standardmäßig sperren (file-based locking), gibt session_abort() die Session-Sperre sofort frei – dadurch können andere Requests, die auf dieselbe Session warten, schneller fortfahren.

Typische Anwendungsfälle sind z. B. AJAX-Endpunkte, die nur Session-Daten lesen, oder Situationen, in denen nach einer Fehlerbehandlung sichergestellt werden soll, dass keine unvollständigen Änderungen persistiert werden. Im Gegensatz zu session_write_close() werden die Daten dabei nicht gespeichert.

Nach dem Aufruf von session_abort() ist die Session nicht mehr aktiv. Ein erneuter Aufruf von session_start() startet die Session neu, wobei wieder die ursprünglich gespeicherten Daten geladen werden.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Session erfolgreich abgebrochen wurde, andernfalls false (z. B. wenn keine aktive Session vorhanden ist).

Beispiele

Session-Daten lesen ohne Speichern (AJAX-Lesezugriff)

<?php
session_start();

// Nur lesender Zugriff – Session-Sperre sofort freigeben
$username = $_SESSION['username'] ?? 'Gast';

// Änderungen werden NICHT übernommen
$_SESSION['last_access'] = time(); // wird verworfen

session_abort();

echo 'Willkommen, ' . htmlspecialchars($username);
Willkommen, Gast

Fehlerbehandlung: unvollständige Session-Änderungen verwerfen

<?php
session_start();

try {
    $_SESSION['cart'][] = ['product_id' => 42, 'qty' => 1];

    // Simulierter Fehler vor dem Abschluss
    throw new RuntimeException('Datenbankfehler beim Speichern der Bestellung');

    session_write_close(); // wird nicht erreicht
} catch (RuntimeException $e) {
    // Änderungen verwerfen, damit der Warenkorb nicht inkonsistent wird
    session_abort();
    echo 'Fehler: ' . $e->getMessage();
    echo PHP_EOL . 'Session-Änderungen wurden verworfen.';
}
Fehler: Datenbankfehler beim Speichern der Bestellung Session-Änderungen wurden verworfen.

// Wichtig · Fallstricke

Sperr-Verhalten: Bei dateibasiertem Session-Handler hält PHP eine exklusive Dateisperre auf die Session-Datei, solange die Session aktiv ist. session_abort() gibt diese Sperre sofort frei, was bei parallelen Requests (z. B. mehrere AJAX-Calls) die Gesamtperformance deutlich verbessern kann.

Verwechslungsgefahr: Nicht mit session_destroy() verwechseln – dieses löscht die Session-Daten dauerhaft. session_abort() lässt die gespeicherten Session-Daten unberührt und verwirft nur die aktuellen In-Memory-Änderungen.

Verfügbarkeit: Die Funktion ist erst seit PHP 5.6.0 verfügbar. Für ältere PHP-Versionen kann session_reset() (ebenfalls ab 5.6.0) verwendet werden, um die Daten zurückzusetzen, ohne die Session zu beenden.