session_start în PHP

Pornește sau reia sesiunea vizitatorului, ca să poți păstra date între pagini în $_SESSION.

Sintaxă
session_start(array $options = []): bool

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ști Session cannot be started after headers have already been sent.
  • Uiți session_start() pe a doua pagină și $_SESSION pare gol. Fiecare script care citește sau scrie sesiunea trebuie să o pornească.
  • Apelezi session_start() de două ori și primești un Notice. Verifică întâi session_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.