Melvin Cowznofski: Sessions endgültig löschen

Beitrag lesen

Hallo,

im PHP Manual wird im Kapitel session_destroy() beim ersten Beispiel aufgezeigt, wie man eine Session endgültig löscht:

<?php
// Initialisierung der Session.
// Wenn Sie session_name("irgendwas") verwenden, vergessen Sie es
// jetzt nicht!
session_start();

// Löschen aller Session-Variablen.
$_SESSION = array();

// Falls die Session gelöscht werden soll, löschen Sie auch das
// Session-Cookie.
// Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000, $params["path"],
        $params["domain"], $params["secure"], $params["httponly"]
    );
}

// Zum Schluß, löschen der Session.
session_destroy();
?>

Wenn ich das 1:1 übertrage und eine mögliche Session danach mit var_dump($_SESSION); überprüfe, bekomme ich noch immer ein leeres Arry zurück. Die Session existiert also noch:

array(0) { } zurück.

Erst, wenn ich zusätzlich noch ein unset($_SESSION); hinzufüge, wird mir bei einer Überprüfung mit var_dump($_SESSION); mitgeteilt, dass es keine Globale Sessionvariable gibt:

Notice: Undefined variable: _SESSION in ... on line ... NULL

Diese Meldung würde ich eigentlich schon erwarten, ohne dass ich noch das unset($_SESSION); hinzufügen muss. Im Beispielcode steht als Kommentar explizit: "Achtung: Damit wird die Session gelöscht, nicht nur die Session-Daten!"

Auch die Aussage "Um wieder Session-Variablen verwenden zu können, muss session_start() aufgerufen werden." in der Beschreibung der Funktion kann ich so nicht nachvollziehen. Wenn ich an den Code des Beispiels statt dem unset($_SESSION); ein $_SESSION['bar'] = 'foo'; anhänge (ohne einem session_start(); !!!), dann funktioniert das wunderbar und kann anschließend mit var_dump($_SESSION); auch ausgegeben werden.

Kann mir bitte wer sagen, wieso das so ist und wo da mein Verständnisproblem liegt? Und vorallem: Da kann ich mir den ganzen Hokuspokus des Beispielcodes ja gleich sparen und mit unset($_SESSION); eine komplette Session kurz und knapp eliminieren? Oder nicht?

Mit lieben Grüßen

Melvin Cowznofski

--
What – me worry?