
Principii generale
Cookie-urile reprezinta perechi nume-valoare pe care serverul web le poate stoca pe hard-disk-iul clientului, prin intermediul browserului web. Ele sunt transmise clientului prin intermediul. unui header HTTP (Set-Cookie sau Set-Cookie2), in cadrul unui raspuns la o cerere a clientului. La urmatoarele cereri depuse de acelasi client catre acelasi server, clientul va trimite automat continutul cookie-ului catre server, care poate folosi datele respective ca si date de intrare ale unei aplicatii ce genereaza o pagina web (asemanator cu informatiile provenite prin GET sau POST). Astfel, cookie-urile sunt un mecanism de propagare a informatiei de la o cerere la alta.
Iata doua utilizari tipice pentru cookie-uri:
• un site care contine o sectiune restrictionata, accesibila numai utilizatorilor autentiflcati, seteaza un cookie in browserul clientului in momentul in care acesta se autentifica. Cookie-ul contine id-ul clientului si va fi trimis automat serverului la cererile urmatoare efectuate de client, ceea ce va permite serverului sa-1 identifice si sa-i trateze cererile ca parte a unei sesiuni
• un site care permite utilizatorului sa specifice preferinte (ex: limba dorita, culoarea etc); odata alese, aceste preferinte sunt stocate pe hard-disk-ul clientului intr-un cookie si sunt trimise serverului la fiecare cerere ulterioara, ceea ce ii da acestuia posibilitatea de a genera de fiecare data pagina in concordanta cu preferintele exprimate anterior de client
Lucrul cu cookie-uri prezinta urmatoarele caracteristici:
• avantaje
- un cookie poate memora informatie in mod persistent, intre doua cereri ale clientului, chiar daca elesunt efectuate la momente de timp indepartate (ex: zile)
- mecanismul de cookies functioneaza in mod transparent pentru utilizator – browserul si serveral web fac operatiile necesare pentru mentinerea starii intre cereri
• dezavantaje
- utilizatorul poate sterge cookie-urile din browse
- browserul poate fi configurat sa nu accepte cookies sau sa le accepte selectiv
- browserele ofera de obicei spatiu de stocare drastic limitat pentru cookies
Parametrii unui cookie
Fiecare cookie trimis clientului are urmatorul set de parametri:
- nume – cel prin intermediul caruia vor fi accesate datele de catre server atunci cand cookie-ul este trimis inapoi de catre client - valoare – informatiile stocate in cookie
- data de expirare - specifica momentul stergerii cookie-ului; daca lipseste, cookie-ul este sters atunci cand userul inchide browserul. Serverul poate schimba acest parametru pentru un cookie deja setat (de exemplu, poate forta stergerea lui setand data de expirare in trecut)
- domeniu si cale -specifica in ce conditii este trimis inapoi cookie-ul catre server: numai daca domeniul este acelasi si URI-ul cerut de client se afla in interiorul caii specificate in cale
- secure - pune conditia ca cookie-ul sa nu fie transmis serverului decat daca conexiunea acestuia cu clientul este una criptata (HTTPS)
- http only – pune conditia ca cookie-ul sa fie accesibil doar serverului web prin intermediul protocolului HTTP, nu si limbajelor de scripting locale (ex: Javascript)
Parametrii nume si valoare sunt obligatorii, toti ceilalti sunt optionali.
Lucrul cu cookies din PHP
Numim setarea unui cookie operatia prin care serverul trimite un cookie catre client prin intermediul headerului HTTP corespunzator, determinand fie crearea cookie-ului in browserul clientului, fie modificarea parametrilor unui cookie setat anterior.
Functia PHP predefinita folosita in acest scop este setcookie:
setcookie ($nume [, $cale [, $expirare [, $cale [, $domeniu [, $secure [, $httponly]]]]]])
Functia returneaza FALSE daca scriptul a produs deja output (si deci headerul HTTP Set-Cookie nu mai poate fi trimis).
Argumentele functiei se mapeaza pe parametrii unui cookie, cu urmatoarele mentiuni:
- valoarea unui cookie nu poate fi decat scalar
- momentul expirarii
- se specifica sub forma de Unix time (numarul de secunde scurs de la 1 ianuarie 1970, care este data conventional a a crearii sistemultii de operare Unix). Functia PHP timeO intoarce momentul prezent exprimat in acest fel, ceea ce o face foarte potrivita pentru setarea momentului expirarii unui cookie
- daca nu este specificat sau setat pe valoarea 0, cookie-ul va expira cand utilizatorul inchide browserul
Exemple:
// setare cookie doar cu nume si valoare: expira la inchiderea browserului
setcookie(“c_id”, 4167);
// setare cookie cu specificarea momentw.lui expirarii: 2 minute de la setare
Setcookie (“color”,”red”, time()+60);
Atentie! Deoarece trimiterea cookie-urilor se.face prin intermediul unui header HTTP, toate cookie-urile trebuie setate inaintea oricarui output al scriptului PHP!
Daca se doreste trimiterea intr-un cookie (si recuperarea ulterioara) a mai multor valori, exista doua posibilitati:
• se seteaza mai multe cookie-uri. Daca se doreste ca, la citirea valorii acestora, sa se obtina un tablou (vezi mai jos accesarea informatiei din cookies), numele cookie-urilor pot fi setate cu sintaxa de tablou:
setcookie(“cookie[0]“, 3);
setcookie(“cookie[l]“, 5);
• se includ valorile in cauza intr-un tablou, care este transformat intr-un string folosind functiile serialize() sau implode()
Accesarea informatiei provenite din cookies
Clientul trimite automat impreuna cu cererea HTTP toate acele cookie-uri ale caror parametri domeniu si cale corespund cu URL-ul solicitat in cerere. Daca URL-ul determina executia unui script PHP, interpretorul PHP primeste de la server informatia din cookie si o stocheaza in variabila $_COOKIE – un tablou asociativ de tip superglobal. Acest tablou contine cate un element pentru fiecare cookie primit, perechea cheie-valoare fiind reprezentata de numele si valoarea cookie-ului.
Atentie! Un cookie este setat intr-un raspuns al serverului si este disponibil acestuia abia incepand cu cererea urmatoare!
If(isset($_cookie(‘lang’])){
$preferred_language = $_COOKIE’lang’];
else{
$preferred_language = “en”;
setcookie(“lang”,”en”);}
Stergerea unui cookie
Stergerea unui cookie se poate face in diferite moduri:
• ca urmare a unei actiuni a utilizatorului: browserele din ziua de astazi ofera utilizatorului interfete facile pentru managementul cookie-urilor, inclusiv stergerea sau modificarea parametrilor acestora
• ca urmare a unei actiuni efectuate pe server:
- programatorul poate da valoarea vida cookie-ului (trimitand un cookie cu parametri identici daravand ca valoare sirul vid)
- programatorul poate, seta momentul expirarii cookie-ului in trecut
Exemplu: pentru un cookie setat initial astfel:
// setarea initiala a cookie-ului
setcookie(“nume”,”Mihai”,time()+2000);
modalitatile de stergere sunt:
// … la o cerere ulterioara* cookie-ul este suprascris, dandu-i-se valoarea “”
setcookie(“nume”, “”);
// …alternativ, se putea muta in trecut momentul expirarii
setcookie(‘nume”, “Mihai”, time() -86400) ;
Nota: este o practica buna ca, la stergerea unui cookie, timpul de expirare safie setat mult in trecut, deoarece ora de pe server si cea depe client pot diferi semnificativ, iar decizia stergerii cookie-ului la expirare ii apartine browserului, care ruleazape client.
26 views 0 Comments »


