setcookie în PHP

Sesiuni și cookie-uri PHP 4+ (opțiuni ca tablou: PHP 7.3+)

Trimite browserului un cookie: o valoare mică pe care browserul o păstrează și o trimite înapoi la fiecare cerere.

Sintaxă
setcookie(string $name, string $value = '', array|int $expires_or_options = 0, string $path = '', string $domain = '', bool $secure = false, bool $httponly = false): bool

Ce face setcookie

Un cookie este o pereche nume-valoare păstrată de browser. setcookie trimite cookie-ul ca antet HTTP, deci trebuie apelată înainte de orice afișare. La cererile următoare, valoarea apare în $_COOKIE["nume"].

Din PHP 7.3 poți da opțiunile ca tablou, ceea ce e mult mai lizibil: expires (timestamp-ul expirării; 0 înseamnă până la închiderea browserului), path, domain, secure (doar prin HTTPS), httponly (JavaScript nu îl poate citi) și samesite ("Lax", "Strict" sau "None").

Pentru a șterge un cookie, îl setezi din nou cu o dată de expirare din trecut și cu aceleași path și domain.

Parametri

Parametru Descriere
$name Numele cookie-ului. Nu poate conține spații, =, , sau ;.
$value Valoarea, ca text. Este codată automat pentru URL.
$expires_or_options Timestamp-ul expirării sau un tablou cu opțiunile expires, path, domain, secure, httponly, samesite.
$path, $domain, $secure, $httponly Opțiunile în forma veche, ca parametri separați.

Ce returnează

true dacă antetul a fost pregătit, false dacă ieșirea a început deja. Nu îți spune dacă browserul a acceptat cookie-ul.

Exemple

Exemplul 1: Salvarea temei alese, pentru 30 de zile

<?php
setcookie("tema", "dark", [
    "expires" => time() + 30 * 24 * 60 * 60,
    "path" => "/",
    "secure" => true,
    "httponly" => true,
    "samesite" => "Lax",
]);

Răspunsul HTTP primit de browser

Set-Cookie: tema=dark; expires=Wed, 18 Nov 2026 11:35:00 GMT; Max-Age=2592000; path=/; secure; HttpOnly; SameSite=Lax

Exemplul 2: Citirea cookie-ului la cererea următoare

Valoarea apare în $_COOKIE abia la următoarea încărcare a paginii, nu în cererea care a trimis cookie-ul.

<?php
$tema = $_COOKIE["tema"] ?? "light";

echo "Tema folosită: " . htmlspecialchars($tema);

Rezultat în browser

Tema folosită: dark

Exemplul 3: Ștergerea unui cookie

<?php
setcookie("tema", "", [
    "expires" => time() - 3600,
    "path" => "/",
]);
unset($_COOKIE["tema"]);

Răspunsul HTTP primit de browser

Set-Cookie: tema=deleted; expires=Thu, 01 Jan 1970 00:00:01 GMT; Max-Age=0; path=/

Greșeli frecvente

  • Citești $_COOKIE imediat după setcookie, în aceeași cerere. Valoarea nu este acolo încă: browserul o trimite abia la cererea următoare.
  • Ștergi cookie-ul cu alt path decât cel folosit la creare. Browserul îl tratează ca pe alt cookie, iar cel vechi rămâne.
  • Pui în cookie date sensibile sau decizii de securitate (de exemplu admin=1). Utilizatorul poate modifica orice cookie. Păstrează astfel de date în sesiune.

Comenzi înrudite

  • session_start: Pornește sau reia sesiunea vizitatorului, ca să poți păstra date între pagini în $_SESSION.
  • header: Trimite un antet HTTP către browser: redirecționare, tipul conținutului, descărcare de fișier, cache.
  • headers_sent / headers_list: Verifică dacă antetele HTTP au fost deja trimise și îți spune în ce fișier și pe ce linie a început afișarea.
  • time: Returnează momentul curent ca număr de secunde de la 1 ianuarie 1970 (timestamp Unix).