session_destroy / session_unset în PHP

Șterge datele sesiunii curente de pe server. Se folosește la deconectare (logout).

Sintaxă
session_destroy(): bool

Ce face session_destroy / session_unset

session_destroy șterge fișierul (sau înregistrarea) în care serverul păstra datele sesiunii. Atenție: nu golește variabila $_SESSION din scriptul curent și nu șterge cookie-ul din browser.

Un logout complet are trei pași: golești $_SESSION (cu $_SESSION = [] sau session_unset()), ștergi cookie-ul de sesiune și apelezi session_destroy(). Sesiunea trebuie să fie pornită înainte, cu session_start().

Ce returnează

true la succes, false la eroare (de exemplu dacă sesiunea nu a fost pornită).

Exemple

Exemplul 1: Deconectare completă

<?php
session_start();

$_SESSION = [];

$p = session_get_cookie_params();
setcookie(session_name(), "", [
    "expires" => time() - 3600,
    "path" => $p["path"],
    "domain" => $p["domain"],
    "secure" => $p["secure"],
    "httponly" => $p["httponly"],
]);

session_destroy();

header("Location: /");
exit;

Răspunsul HTTP primit de browser

HTTP/1.1 302 Found
Set-Cookie: PHPSESSID=deleted; expires=Thu, 01 Jan 1970 00:00:01 GMT; Max-Age=0; path=/
Location: /

Exemplul 2: session_destroy nu golește $_SESSION

<?php
session_start();
$_SESSION["utilizator"] = "ana";

session_destroy();
var_dump($_SESSION);

session_unset(); // sau $_SESSION = [];
var_dump($_SESSION);

Rezultat în browser

array(1) {
  ["utilizator"]=>
  string(3) "ana"
}
array(0) {
}

Greșeli frecvente

  • Apelezi doar session_destroy() și apoi afișezi „Bun venit, ana” pe aceeași pagină. Datele din $_SESSION sunt încă în memorie până la finalul scriptului.
  • Apelezi session_destroy() fără session_start() înainte. Primești Trying to destroy uninitialized session.
  • Folosești unset($_SESSION). Ștergi variabila superglobală însăși și sesiunea nu mai funcționează corect. Folosește $_SESSION = [].

Comenzi înrudite

  • session_start: Pornește sau reia sesiunea vizitatorului, ca să poți păstra date între pagini în $_SESSION.
  • session_regenerate_id: Schimbă identificatorul sesiunii și păstrează datele. Se apelează la autentificare, contra atacurilor de tip session fixation.
  • setcookie: Trimite browserului un cookie: o valoare mică pe care browserul o păstrează și o trimite înapoi la fiecare cerere.