session_write_close / session_commit în PHP

Salvează datele sesiunii și o închide, ca alte cereri ale aceluiași vizitator să nu mai aștepte după ea.

Sintaxă
session_write_close(): bool

Ce face session_write_close / session_commit

Cu stocarea implicită în fișiere, PHP blochează fișierul sesiunii cât timp scriptul rulează. Dacă o pagină face o operație lungă (export, apel API), celelalte cereri ale aceluiași utilizator (de exemplu AJAX) așteaptă. session_write_close salvează datele și eliberează blocarea imediat.

După apel, poți citi în continuare $_SESSION, dar modificările nu mai sunt salvate. session_commit este un alias, cu exact același comportament.

Ce returnează

true la succes, false la eroare.

Exemple

Exemplul 1: Eliberarea sesiunii înaintea unei operații lungi

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

// operație lungă: celelalte cereri ale lui Ana nu mai așteaptă
sleep(5);
echo "Raport generat pentru $utilizator";

Rezultat în browser

Raport generat pentru ana

Exemplul 2: Modificările de după închidere se pierd

Al treilea element a fost adăugat după închiderea sesiunii, deci nu apare la cererea următoare.

<?php
session_start();
$_SESSION["cos"] = ["laptop", "mouse"];
session_commit();

$_SESSION["cos"][] = "tastatură";

// la cererea următoare
session_start();
print_r($_SESSION["cos"]);

Rezultat în browser

Array
(
    [0] => laptop
    [1] => mouse
)

Greșeli frecvente

  • Modifici $_SESSION după session_write_close și te aștepți să fie salvat. Pornește din nou sesiunea cu session_start() înainte.

Comenzi înrudite

  • session_start: Pornește sau reia sesiunea vizitatorului, ca să poți păstra date între pagini în $_SESSION.
  • session_abort: Închide sesiunea fără să salveze modificările făcute în $_SESSION în cererea curentă.
  • session_register_shutdown: Înregistrează salvarea și închiderea sesiunii (session_write_close) ca funcție rulată la finalul scriptului.