Ce face session_set_save_handler
Forma recomandată primește un obiect care implementează interfața SessionHandlerInterface, cu metodele open, close, read, write, destroy și gc. PHP le apelează automat: read la session_start(), write la finalul scriptului sau la session_write_close().
Așa poți ține sesiunile într-o tabelă MySQL, partajată de mai multe servere. Forma veche, cu șase funcții separate, este învechită din PHP 8.4. Handler-ul se setează înainte de session_start().
Parametri
| Parametru | Descriere |
|---|---|
$open (sau obiectul) |
Un obiect SessionHandlerInterface (recomandat) sau, în forma veche, funcția de deschidere. |
$close, $read, $write, $destroy, $gc |
În forma veche: funcțiile pentru fiecare operație. |
$create_sid, $validate_sid, $update_timestamp |
Opțional, în forma veche. |
Ce returnează
true la succes, false la eroare.
Exemple
Exemplul 1: Handler propriu, cu jurnal al apelurilor
Handler-ul salvează sesiunea în fișiere proprii. Pentru MySQL, metodele fac SELECT, REPLACE și DELETE pe o tabelă.
<?php
class SesiuniProprii implements SessionHandlerInterface
{
public array $jurnal = [];
public function open(string $cale, string $nume): bool { return true; }
public function close(): bool { return true; }
public function read(string $id): string|false
{
$this->jurnal[] = "read($id)";
return is_file("sesiune_$id.txt") ? file_get_contents("sesiune_$id.txt") : "";
}
public function write(string $id, string $date): bool
{
$this->jurnal[] = "write($id)";
return file_put_contents("sesiune_$id.txt", $date) !== false;
}
public function destroy(string $id): bool
{
@unlink("sesiune_$id.txt");
return true;
}
public function gc(int $durata): int|false { return 0; }
}
$handler = new SesiuniProprii();
session_set_save_handler($handler);
session_id("abc123");
session_start();
$_SESSION["utilizator"] = "ana";
session_write_close();
print_r($handler->jurnal);
echo file_get_contents("sesiune_abc123.txt");
Rezultat
Array
(
[0] => read(abc123)
[1] => write(abc123)
)
utilizator|s:3:"ana";
Greșeli frecvente
- Apelezi
session_set_save_handlerdupăsession_start()sau după ce ai afișat ceva. Handler-ul nu mai poate fi schimbat. - Metoda
readreturneazăfalsepentru o sesiune nouă. Trebuie să returneze text gol;falseînseamnă eroare și sesiunea nu pornește.
Comenzi înrudite
session_start: Pornește sau reia sesiunea vizitatorului, ca să poți păstra date între pagini în $_SESSION.session_write_close / session_commit: Salvează datele sesiunii și o închide, ca alte cereri ale aceluiași vizitator să nu mai aștepte după ea.session_register_shutdown: Înregistrează salvarea și închiderea sesiunii (session_write_close) ca funcție rulată la finalul scriptului.session_module_name: Returnează sau schimbă modulul care stochează sesiunile (implicit files; altele: redis, memcached).