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
$_COOKIEimediat dupăsetcookie, în aceeași cerere. Valoarea nu este acolo încă: browserul o trimite abia la cererea următoare. - Ștergi cookie-ul cu alt
pathdecâ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).