Start · Sprachen · PHP · Referenz · session_unset

session_unset

Funktion

Löscht alle aktuell registrierten Session-Variablen (leert das <code>$_SESSION</code>-Array), ohne die Session selbst zu zerstören.

seit PHP 4.0.0 Kategorie: http

Signatur

session_unset(): true

Beschreibung

session_unset() entfernt alle Variablen, die in der aktuellen Session gespeichert sind, indem es das superglobale Array $_SESSION vollständig leert. Die Session selbst bleibt dabei aktiv – die Session-ID sowie die zugehörige Session-Datei bleiben erhalten. Der Effekt entspricht dem Aufruf von $_SESSION = [];, weshalb letzterer Ansatz in modernem Code oft bevorzugt wird.

Die Funktion ist besonders beim Abmelden eines Benutzers nützlich, wenn man sicherstellen möchte, dass sämtliche Sitzungsdaten (z. B. Benutzer-ID, Berechtigungen, Warenkorb-Inhalt) sofort entfernt werden. Soll die Session darüber hinaus vollständig vernichtet werden (z. B. beim Logout), muss anschließend session_destroy() aufgerufen werden.

Zu beachten ist, dass session_unset() nur dann sinnvoll einsetzbar ist, wenn vorher session_start() aufgerufen wurde. Andernfalls hat die Funktion keinen Effekt, da kein aktives Session-Kontext existiert.

Ab PHP 8.0.0 gibt die Funktion immer true zurück; in älteren Versionen war der Rückgabewert void.

Rückgabewert

Typ
true
Beschreibung
Gibt ab PHP 8.0.0 stets true zurück. In PHP 7.x und älter ist der Rückgabewert void.

Beispiele

Benutzer-Logout mit vollständiger Session-Bereinigung

<?php
session_start();

// Session-Variablen vor dem Logout
$_SESSION['user_id'] = 42;
$_SESSION['username'] = 'alice';
$_SESSION['role'] = 'admin';

echo 'Vor dem Logout: ' . count($_SESSION) . ' Variablen' . PHP_EOL;

// Alle Session-Variablen löschen
session_unset();

echo 'Nach session_unset(): ' . count($_SESSION) . ' Variablen' . PHP_EOL;

// Session-Datei und Session-Cookie ebenfalls entfernen
if (ini_get('session.use_cookies')) {
    $params = session_get_cookie_params();
    setcookie(
        session_name(),
        '',
        time() - 42000,
        $params['path'],
        $params['domain'],
        $params['secure'],
        $params['httponly']
    );
}
session_destroy();

echo 'Session vollständig beendet.' . PHP_EOL;
Vor dem Logout: 3 Variablen Nach session_unset(): 0 Variablen Session vollständig beendet.

Äquivalenz von session_unset() und $_SESSION = []

<?php
session_start();

$_SESSION['token'] = 'abc123';
$_SESSION['lang']  = 'de';

// Methode 1: session_unset()
session_unset();
var_dump($_SESSION); // array(0) {}

// Session neu befüllen
$_SESSION['token'] = 'xyz789';
$_SESSION['lang']  = 'en';

// Methode 2: moderne Alternative mit identischem Ergebnis
$_SESSION = [];
var_dump($_SESSION); // array(0) {}
array(0) { } array(0) { }

// Wichtig · Fallstricke

Sicherheitshinweis beim Logout: session_unset() allein reicht für einen sicheren Logout nicht aus. Die Session-Datei auf dem Server bleibt bestehen, und ein Angreifer mit der alten Session-ID könnte die leere Session weiter nutzen. Rufe daher immer zusätzlich session_destroy() auf und entferne das Session-Cookie auf dem Client.

Veraltete Nutzung: In älteren PHP-Versionen (vor PHP 4.0) wurde oft session_unregister() für einzelne Variablen verwendet. Ab PHP 5.4 ist diese Funktion entfernt. Verwende statt session_unset() für eine einzelne Variable einfach unset($_SESSION['key']).

Keine aktive Session: Wenn session_start() nicht vorher aufgerufen wurde, hat session_unset() keinen Effekt und erzeugt in manchen Konfigurationen eine Warnung.