Ce face session_start
HTTP nu ține minte nimic între cereri. Sesiunile rezolvă asta: PHP îi dă fiecărui vizitator un identificator unic, trimis într-un cookie (implicit PHPSESSID), iar datele rămân pe server. După session_start(), orice pui în $_SESSION este disponibil pe toate paginile, până la închiderea sesiunii.
session_start trebuie apelată la începutul fiecărui script care folosește sesiunea, înainte de orice afișare, pentru că trimite un cookie. Starea curentă o afli cu session_status(): PHP_SESSION_NONE (nepornită) sau PHP_SESSION_ACTIVE (pornită).
Opțiunile primite ca tablou înlocuiesc setările session.* din php.ini (fără prefix), de exemplu cookie_lifetime, cookie_httponly, cookie_samesite sau read_and_close.
Parametri
| Parametru | Descriere |
|---|---|
$options |
Opțional. Setări pentru sesiune, de exemplu ["cookie_lifetime" => 86400, "cookie_httponly" => true]. |
Ce returnează
true dacă sesiunea a pornit, altfel false.
Exemple
Exemplul 1: Contor de vizite
Rezultatul de mai jos este cel afișat la a treia încărcare a paginii.
<?php
session_start();
$_SESSION["vizite"] = ($_SESSION["vizite"] ?? 0) + 1;
echo "Ai deschis această pagină de {$_SESSION['vizite']} ori.";
Rezultat în browser
Ai deschis această pagină de 3 ori.
Exemplul 2: Autentificare și pagină protejată
<?php
// login.php, după verificarea parolei
session_start();
session_regenerate_id(true);
$_SESSION["utilizator"] = "ana";
header("Location: /cont/");
exit;
// cont.php
session_start();
if (!isset($_SESSION["utilizator"])) {
header("Location: /login/");
exit;
}
echo "Bun venit, " . htmlspecialchars($_SESSION["utilizator"]) . "!";
Rezultat în browser
Bun venit, ana!
Exemplul 3: Opțiuni și pornire o singură dată
<?php
if (session_status() === PHP_SESSION_NONE) {
session_start([
"cookie_httponly" => true,
"cookie_secure" => true,
"cookie_samesite" => "Lax",
]);
}
echo "Sesiune activă: " . session_id();
Rezultat în browser
Sesiune activă: 27efc221938daa0305097068ba087548
Greșeli frecvente
- Afișezi ceva înainte de
session_start(). PrimeștiSession cannot be started after headers have already been sent. - Uiți
session_start()pe a doua pagină și$_SESSIONpare gol. Fiecare script care citește sau scrie sesiunea trebuie să o pornească. - Apelezi
session_start()de două ori și primești unNotice. Verifică întâisession_status().
Comenzi înrudite
session_destroy / session_unset: Șterge datele sesiunii curente de pe server. Se folosește la deconectare (logout).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.isset: Verifică dacă o variabilă există și nu are valoarea null.