setrawcookie în PHP

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

Trimite un cookie exact ca setcookie, dar fără să codeze valoarea pentru URL.

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

Ce face setrawcookie

setcookie trece valoarea prin urlencode, deci tema=dark ajunge în browser ca tema%3Ddark. setrawcookie trimite valoarea neschimbată. Este necesară când un alt program (JavaScript, un server din alt limbaj) citește cookie-ul și se așteaptă la formatul exact.

Pentru că nu se face nicio codare, valoarea nu poate conține spații, virgule, punct și virgulă sau linii noi. Parametrii și opțiunile sunt aceleași ca la setcookie.

Parametri

Parametru Descriere
$name Numele cookie-ului.
$value Valoarea, trimisă exact așa. Fără spații, , sau ;.
$expires_or_options Timestamp-ul expirării sau tabloul de opțiuni (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.

Exemple

Exemplul 1: Diferența față de setcookie

<?php
setrawcookie("preferinte", "tema=dark", ["path" => "/"]);
setcookie("preferinte2", "tema=dark", ["path" => "/"]);

Răspunsul HTTP primit de browser

Set-Cookie: preferinte=tema=dark; path=/
Set-Cookie: preferinte2=tema%3Ddark; path=/

Exemplul 2: Valoare cu spațiu

<?php
try {
    setrawcookie("oras", "Baia Mare");
} catch (ValueError $e) {
    echo get_class($e) . "\n";
    echo rawurlencode("Baia Mare");
}

Rezultat

ValueError
Baia%20Mare

Greșeli frecvente

  • Trimiți o valoare cu spații sau diacritice. PHP aruncă ValueError. Codează valoarea cu rawurlencode sau folosește setcookie.

Comenzi înrudite

  • setcookie: Trimite browserului un cookie: o valoare mică pe care browserul o păstrează și o trimite înapoi la fiecare cerere.
  • rawurlencode / rawurldecode: Codează un text pentru URL după standardul RFC 3986: spațiul devine %20. Se folosește pentru bucățile din calea adresei.
  • header: Trimite un antet HTTP către browser: redirecționare, tipul conținutului, descărcare de fișier, cache.