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$_SESSIONsunt încă în memorie până la finalul scriptului. - Apelezi
session_destroy()fărăsession_start()înainte. PrimeștiTrying 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.