Clear-Site-Data in PHP konfigurieren

Schritt-für-Schritt-Anleitung: Clear-Site-Data in PHP — Browser-Daten bei Logout gezielt löschen mit header()-Code zum Kopieren.

PHP · Schritt für Schritt

Clear-Site-Data in PHP

Clear-Site-Data weist den Browser an, gespeicherte Daten zu löschen — Cookies, Cache, localStorage und IndexedDB. Dieser Header wird typischerweise beim Logout gesetzt, um sicherzustellen, dass keine Session-Daten im Browser verbleiben. Mit 2 von 166 Punkten im Wolf-Agents Web Security Check.

In PHP setzen Sie Clear-Site-Data mit header() — aber nur auf der Logout-Seite oder bei Passwort-Reset. Im Gegensatz zu anderen Security-Headern darf dieser Header nicht global per auto_prepend_file gesetzt werden, da er sonst bei jedem Request alle Browser-Daten löscht. Setzen Sie ihn gezielt auf die Endpunkte, die eine Datenbereinigung erfordern.

Clear-Site-Data unterstützt drei Direktiven: "cache" löscht den HTTP-Cache, "cookies" alle Cookies der Domain, und "storage" löscht localStorage, sessionStorage und IndexedDB. Die Wildcard "*" löscht alles. Beachten Sie die doppelten Anführungszeichen — sie sind Teil der Header-Syntax.

1 Schritt 1 von 3

Clear-Site-Data in PHP konfigurieren

Drei Varianten: Direkt im Logout-Script, selektives Löschen einzelner Datentypen, und PSR-15-Middleware für Framework-Projekte. Wichtig: Clear-Site-Data wird nur auf Logout- und Reset-Endpoints gesetzt — niemals global.

logout.php Logout
<?php
// logout.php — Clear-Site-Data bei Logout

// Session beenden
session_start();
session_destroy();

// Browser-Daten komplett löschen
header('Clear-Site-Data: "cache", "cookies", "storage"');

// Redirect zum Login
header('Location: /login', true, 302);
exit;
security-helpers.php Selektiv
<?php
// Selektives Löschen je nach Kontext

// Nur Cookies löschen (Session-Invalidierung)
header('Clear-Site-Data: "cookies"');

// Nur Cache löschen (nach Deploy)
// header('Clear-Site-Data: "cache"');

// Nur Storage löschen (localStorage, IndexedDB)
// header('Clear-Site-Data: "storage"');

// Alles löschen mit Wildcard
// header('Clear-Site-Data: "*"');
src/Middleware/LogoutMiddleware.php PSR-15
<?php
// src/Middleware/LogoutMiddleware.php — PSR-15

namespace App\Middleware;

use Psr\Http\Message\ResponseInterface;
use Psr\Http\Server\MiddlewareInterface;
use Psr\Http\Server\RequestHandlerInterface;

class LogoutMiddleware implements MiddlewareInterface
{
    public function process($request, $handler): ResponseInterface
    {
        $response = $handler->handle($request);
        $path = $request->getUri()->getPath();

        if ($path === '/logout') {
            return $response->withHeader(
                'Clear-Site-Data',
                '"cache", "cookies", "storage"'
            );
        }

        return $response;
    }
}
Nicht global setzen! Clear-Site-Data darf nicht per auto_prepend_file auf alle Seiten gesetzt werden. Sonst werden bei jedem Seitenaufruf alle Cookies, der Cache und der Storage gelöscht — die Anwendung wird unbenutzbar.
2 Schritt 2 von 3

Konfiguration verifizieren

Prüfen Sie den Header auf der Logout-URL. Der Header sollte nur auf Endpunkten erscheinen, die eine Datenbereinigung erfordern. Testen Sie auch, dass normale Seiten den Header nicht setzen.

Terminal Verifizierung
# Clear-Site-Data prüfen (auf Logout-URL)
curl -sI https://ihre-domain.de/logout | grep -i clear-site-data

# Erwartete Ausgabe:
Clear-Site-Data: "cache", "cookies", "storage"

# Wichtig: Der Header darf NUR auf Logout/Reset-URLs
# gesetzt werden — nicht global per auto_prepend_file!
# Sonst werden bei JEDEM Request alle Daten gelöscht.
Nutzen Sie den Wolf-Agents Web Security Check für eine vollständige Prüfung aller 2 Punkte dieses Headers.
3 Schritt 3 von 3

Häufige Fehler

Headers already sent

Der häufigste PHP-Fehler: header() nach einer Ausgabe aufrufen. Da Clear-Site-Data typischerweise im Logout-Script gesetzt wird, stellen Sie sicher, dass vor dem header()-Aufruf keine HTML-Ausgabe stattfindet.

Anführungszeichen vergessen

Die Werte müssen in doppelten Anführungszeichen stehen: "cache", nicht cache. Ohne Anführungszeichen ignoriert der Browser den Header. In PHP müssen Sie die Anführungszeichen escapen oder einfache Anführungszeichen verwenden.

Global per auto_prepend_file gesetzt

Clear-Site-Data darf nicht global gesetzt werden. Wenn der Header auf jeder Seite erscheint, löscht der Browser bei jedem Seitenaufruf alle Daten. Setzen Sie den Header nur auf Logout-, Reset- und Session-Invalidierungs-Endpunkten.

Nur über HTTPS wirksam

Clear-Site-Data funktioniert nur über HTTPS. Auf HTTP-Verbindungen ignoriert der Browser den Header. Stellen Sie sicher, dass Ihr Logout-Endpoint über HTTPS erreichbar ist — was durch HSTS automatisch der Fall sein sollte.

Compliance-Relevanz

OWASP ASVS — V3.3 — Session-Daten müssen bei Logout vollständig invalidiert werden.
DSGVO — Art. 17 — Recht auf Löschung — Clear-Site-Data unterstützt die technische Umsetzung.
NIS2 — Art. 21(e) — Sicherheit bei der Entwicklung und Wartung von Informationssystemen.

Wie steht Ihre Domain bei Clear-Site-Data?

Prüfen Sie es jetzt — kostenlos, ohne Registrierung, mit 166 Prüfpunkte.