Scopuri
• învăţaţi care este modul de funcţionare a variabilelor cookie
• învăţaţi să creaţi, să obţineţi accesul la variabilele cookie şi să le ştergeţi
• învăţaţi să stocaţi mai multe valori într-o variabilă cookie
• învăţaţi să specificaţi opţiunile dintr-o variabilă cookie
Acest modul vă prezintă noţiunile introductive referitoare la variabilele de date cookie, o caracteristică HTTP care vă permite să stocaţi date în sistemul unui utilizator. Variabilele cookie sunt utile pentru stocarea preferinţelor utilizatorilor şi a altor informaţii care trebuie reţinute atunci când utilizatorul trece la o nouă pagină Web.
Accesul la variabilele cookie şi crearea acestora
Valorile majorităţii variabilelor dispar atunci când scriptul PHP care le conţine îşi încheie execuţia. Spre deosebire de acestea, valorile variabilelor cookie se pot păstra un timp indefinit. Pentru ca valorile lor să se poată păstra, browserul utilizatorului stochează variabilele cookie în unitatea de hard-disc locală a utilizatorului.
Variabilele cookie sunt utile dintr-o mulţime de puncte de vedere. De exemplu, multe situri Web folosesc variabile cookie pentru a stoca identitatea utilizatorului şi preferinţele de vizualizare ale acestuia. Când utilizatorul revine la situl Web, variabilele cookie permit browserului să recunoască utilizatorul şi să restaureze opţiunile sitului selectate de către utilizator.
Din păcate, variabilele cookie nu constituie soluţia perfectă pentru un mediu de stocare pe termen lung şi prezintă o serie de dezavantaje. De exemplu:
• Un utilizator poate dezactiva variabilele cookie prin stabilirea unei opţiuni a browserului
• în anumite situaţii, variabilele cookie pot fi vizualizate de alţi utilizatori decât utilizatorul ale cărui date le stochează
• Un site poate stoca numai 20 de variabile cookie şi numai 4KB de informaţii în unitatea de hard-disc locală a utilizatorului
• Numeroase versiuni ale browserelor frecvent folosite au erori care le împiedică să folosească variabilele cookie în mod adecvat
În ciuda acestor dezavantaje, variabilele cookie rămân cea mai populară tehnică pentru obţinerea unui mediu de stocare pe termen lung. Deci, este important să înţelegeţi care este modul de funcţionare şi de utilizare a acestora.
Accesul la o variabilă cookie
Poate că trăsătura cea mai caracteristică a variabilelor cookie o constituie comoditatea. Dacă aţi creat o variabilă cookie, valoarea acesteia este automat pusă la dispoziţie ca variabilă PHP având acelaşi nume cu acela al variabilei cookie. De exemplu, să presupunem că aţi creat o variabilă cookie denumită fruct şi că îi atribuiţi valoarea banana. Această pereche nume-valoare este apoi pusă la dispoziţia fiecărui script PHP asociat sitului dumneavoastră de Web. Deci puteţi afişa valoare variabilei cookie folosind următoarea instrucţiune:
Echo „Valoarea variabilei cookie este $fruct.”;
Această instrucţiune are ca efect afişarea următorului rezultat:
Valoarea variabilei cookie este banana.
Variabila PHP de tip tablou asociativ HTTP_COOKIE_VARS conţine numele şi valoarea fiecărei variabile cookie curentă. Dacă doriţi să vizualizaţi fiecare variabilă cookie disponibilă şi valoarea acesteia, puteţi invoca funcţia phpinfo(), care afişează valoarea tabloului HTTP_COOKIE_VARS. Dacă doriţi să obţineţi acces la tablou prin metode programatice, puteţi folosi un program ca următorul:
Foreach($HTTP_COOKIE_VARS as $nume => $valoare)
Echo „<BR>$nume => $valoare”;
Crearea unei variabile cookie
Crearea unei variabile cookie este aproape la fel de simplă ca şi obţinerea accesului la aceasta. Pentru a crea o variabilă cookie, invocaţi funcţia setcookie(), care are următoarea formă:
setcookie(nume, valoare, expirare)
Argumentul nume specifică numele variabilei cookie, iar argumentul valoare specifică valoarea variabilei. Argumentul expirare indică momentul expirării variabilei cookie; după ora specificată, variabila cookie nu mai este accesibilă.
În general, este convenabil să se specifice momentul expirării folosind funcţia time(), care returnează intervalul de timp (exprimat în secunde) scurs de la 1 ianuarie 1970. Puteţi adăuga o valoare de tip decalaj (offset), care specifică intervalul de timp pe durata căruia variabila cookie trebuie să fie accesibilă. De exemplu, să luăm în considerare următoarea instrucţiune:
setcookie(„fruct”, „banana”, time()+3600);
Această instrucţiune creează o variabilă cookie denumită fruct, care are valoarea banana. Variabila cookie va fi disponibilă timp de o oră (3600 secunde) de la crearea sa.
Dacă preferaţi, puteţi specifica momentul expirării folosind funcţia mktime (). Această funcţie are următoarea formă:
mktime(ore,minute,secunde,luna,zi,an)
De exemplu, următoarea instrucţiune creează o variabilă cookie care expiră la o secundă după miezul nopţii primei zile a anului 2005:
Setcookie(„fruct”, „banana”, mktime(0, 0, 1, 1, 1, 2005));
Valorile variabilelor cookie sunt trimise de către browser ca parte a antetelor HTTP. Ca atare, valorile variabilelor cookie trebuie să fie stabilite anterior expedierii oricăror altor valori către browser. Trimiterea fie şi a unui singur spaţiu vă poate împiedica să configuraţi valoarea unei variabile cookie. Pentru a evita problemele, asiguraţi-vă că un script PHP care stabileşte o valoare a unei variabile cookie este plasat în partea superioară a fişierului, fără caractere de tip spaţiu alb care să-l preceadă. De asemenea, stabiliţi valoarea variabilei cookie înainte de a executa o instrucţiune echo sau o altă instrucţiune PHP care trimite browserului date de ieşire.
Întrebare: Ce este un antet HTTP?
Răspuns: înainte de a trimite date HTML unui browser, un server Web trimite, în general, unul sau mai multe antete HTTP; aceste antete sunt cunoscute sub numele de antete de răspuns al serverului. Similar, înainte de a trimite informaţii unui server Web, un browser Web trimite, în general, unul sau mai multe antete HTTP; aceste antete sunt cunoscute sub numele de antete de cerere. Antetele de răspuns al serverului frecvent folosite descriu configuraţia serverului şi furnizează informaţii referitoare la adresa URL solicitată de client. Antetele de cerere utilizate de obicei descriu configuraţia clientului şi formatele de date acceptabile de către client.
În afară de antetele de răspuns al serverului şi de antetele de cerere, protocolul HTTP foloseşte antete generale şi antete de entitate. Antetele generale sunt folosite atât de către clienţi, cât şi de către servere, pentru a specifica informaţii precum data curentă şi opţiunile de conexiune. Antetele de entitate descriu formatul datelor schimbate de un client şi un server.
Ştergerea unei variabile cookie
Deoarece o variabilă cookie are o dată de expirare, aceasta va fi ştearsă automat la un oarecare interval de timp după crearea sa. Totuşi, puteţi şterge o variabilă cookie imediat. Pentru aceasta, fixaţi momentul expirării variabilei cookie la un moment de timp din trecut. De exemplu, pentru a şterge o variabilă cookie denumit fruct, puteţi folosi următoarea instrucţiune:
Setcookie(„fruct”, „”, time()-3600);
Această instrucţiune stabileşte timpul de expirare cu o oră (3600 de secunde) în urmă. Remarcaţi că valoarea variabilei cookie este exprimată sub forma unui şir vid; din moment ce variabila cookie nu va mai fi disponibilă, valoarea sa nu mai are importanţă.
Tehnici avansate de utilizare a variabilelor cookie
Această secţiune prezintă unele tehnici mai avansate pentru lucrul cu variabile cookie. Prima sub-secţiune explică modul de stocare a mai mult de 20 de valori într-o singură variabilă cookie. Cea de-a doua sub-secţiune explică modul de utilizare a mai multor argumente suplimentare ale funcţiei setcookie ().
Stocarea mai multor valori într-o variabilă cookie
Deoarece un sit Web poate stoca numai 20 de variabile cookie în sistemul unui utilizator, capacitatea de a stoca mai multe valori într-o singură variabilă cookie este utilă, în conformitate cu manualul PHP pe suport electronic, puteţi realiza acest lucru prin specificarea unui tablou ca nume al variabilei cookie. De exemplu, puteţi folosi un program ca acesta:
//Un exemplu eronat de variabila cookie cu mai multe valori
for ($i = 0; $i < 30; $i++)
{
setcookie(„cookies[$i]”, „$i”);
}
(isset($cookies))
{
foreach ($cookies as $i => $cookie)
{
echo „<BR>$i => $cookie”;
}
}
Din păcate, acest procedeu nu funcţionează. Contrar informaţiilor din manualul PHP, fiecare element al tabloului este stocat într-o variabilă cookie separată. Astfel, prin utilizarea acestui procedeu nu puteţi stoca mai mult de 20 de valori.
Pe de altă parte, stocarea mai multor valori într-o singură variabilă cookie este posibilă. Pentru aceasta, inseraţi valorile într-un tablou şi folosiţi funcţia serialize() pentru a „împacheta" elementele tabloului într-un şir; ulterior, puteţi recupera valoarea tabloului folosind funcţia unserialize(). Iată un exemplu care prezintă modul de creare a unei variabile cookie care conţine mai multe valori, precum şi modul de acces la aceasta:
// Se creeaza un tablou
for ($i = 0; $i < 30; $i++)
{
$tablou[$i]=$i;
}
// Se impacheteaza intregul tablou intr-un sir
$s = serialize($tablou);
// Se creeaza o variabila cookie si se stabileste valoarea sa
setcookie(„cookies”,$s);
if(isset($cookies))
{
//Se despacheteaza valoarea variabilei cookie
$tablou = unserialize(stripslashes($cookies));
// Demonstreaza ca totul este in ordine,
// prin afisarea elementelor tabloului
foreach ($tablou as $i => $cookie)
{
echo „<BR>$i => $cookie”;
}
}
Funcţia stripslashes() este folosită pentru eliminarea secvenţelor escape adăugate la şir atunci când valoarea variabilei cookie este returnată de PHP.
Deşi acest procedeu reuşeşte să ocolească limita celor 20 de variabile cookie, nu poate depăşi limita celor 4KB de date stocate într-o variabilă cookie pentru fiecare sit Web în parte. Dacă doriţi să stocaţi mai mult de 4KB de date, trebuie să stocaţi datele într-o bază de date pe parte de server sau într-un alt loc decât o variabilă cookie.
Specificarea accesului la o variabilă cookie şi alte opţiuni
Funcţia setcookie() poate prelua maximum şase argumente, inclusiv trei argumente despre care nu am discutat încă. Iată formatul complet al funcţiei setcookie():
setcookie(nume, valoare, expirare, cale, domeniu, sigur)
Argumentele nume, valoare şi expirare au fost descrise în secţiunea precedentă a acestui modul.
Argumentul cale vă permite să specificaţi calea URL asociată variabilei cookie. În mod prestabilit, variabila cookie este disponibilă pentru scripturile din catalogul care conţine scriptul în care a fost configurată variabila respectivă, precum şi pentrul scripturile din sub-cataloagele aferente catalogului respectiv. În particular, scripturilor din cataloagele părinte ale catalogului care conţine scriptul nu li se permite accesul prestabilit la variabila cookie.
Pentru a pune variabila cookie la dispoziţia scripturilor dintr-un anumit catalog din sub-cataloagele sale, specificaţi o valoare a argumentului cale. De exemplu, pentru a pune variabila cookie la dispoziţia întregului arbore de cataloage, specificaţi " /" ca valoare a argumentului cale; pentru a face variabila cookie disponibilă în catalogul /-test şi în sub-cataloagele sale, specificaţi "/-test/" ca valoare a argumentului cale. |