www.Horicul.3x.ro




Tutorial PHP


BackNext

Utilizare cookies in PHP

Suportul pentru cookies este integrat in limbajul PHP. Utilizarea de cookies din PHP este la fel de facila ca si utilizarea informatiilor din form-uri HTML.

Pentru crearea unui cookie se va folosi functia setcookie. Cea mai simpla forma a acestei comenzi este:

booleansetcookie("numeCookie", "valoare")

Acest apel va crea un cookie avand numele "numeCookie" si valoarea specificata. Parametrii de restrictionare vor fi setati toti cu valori implicite.

Functia returneaza adevarat daca s-a putut trimite acel cookie spre navigator si fals in caz contrar. Daca functia returneaza adevarat nu inseamna insa ca acel client a acceptat respectivul cookie. Un client poate refuza un cookie daca s-au depasit limitele cantitative (300 sau 20) sau daca navigatorul este setat sa refuze informatiile cookie.

Pentru a permite cererii de creare a cookie-ului sa fie transmisa catre server trebuie ca apelul setcookie sa apara inaintea oricarei alte informatii trimise clientului, chiar si inaintea unui simplu spatiu sau a tagurilor<HTML> sau <HEAD>. Acest lucru este necesar deoarece datele pentru creare cookies sunt impachetate in antetul raspunsului HTTP catre client, antet care se transmite automat inaintea oricarei informatii care va aparea in pagina.

In cazul in care se doreste mentinerea mai multor date la client se vor crea mai multe cookies.Dezavantajul acestei metode este legata de restrictia de maxim 20 de cookies / server. Pentru a evita acest lucru se poate apela la asocierea valorilor multiple la un anumit cookie. Lucrul acesta este posibil daca se apeleaza la tablouri in locul valorii singulare. Spre exemplu se poate folosi secventa:

<?php
    setcookie("preturi[0]",2000);
   setcookie("preturi[1]",5000);
...
?>

Pentru a extinde durata de viata a unui cookie se poate trimite, prin intermediul functiei setcookie, si termenul de expirare a lui. Timpul trebuie transmis ca si o valoarea UNIX timestamp (numar de secunde scurs de la 01.01.1970). In PHP exista doua functii pe baza carora se poate calcula un timestamp pentru o anumita data. Prima este functia mktime care poate fi folosita pentru a calcula date absolute (sintaxa: mktime( ore, min, sec, luna, zi, an ) ). A doua functie este time care returneaza momentul curert in format timestamp. Utilizand time se poate calcula o data relativa de expirare (ex. 30 de zile de la data curenta: time()+30*24*60*60). O problema care apare relativ la data expirarii este "timpul diferit" intre setarea cookie-ului (timpul de pe server) si timpul fata de care navigatorul testeaza expirarea lui (timpul de pe calculatorul client).

In mod frecvent un server Web retine mai multe site-uri diferite. In acest caz se creaza o serioasa bresa de securitate daca navigatorul trimite cookies setate de un site catre paginile altui site de pe acelasi server. Pentru a evita acest lucru se poate apela la parametrul "directorul valid" pentru un cookie. In acest caz, informatiile cookies vor fi trimise doar paginilor care se gases in directoarele care incep cu prefixul stabilit. Spre exemplu, pentru un director valid "/firma" se va trimite informatia spre paginile "/firma1/pag1.php" si "/firma2/formulare/f23.php", dar nu si spre "/firme/index.php":

 setcookie("user", "Horia", $expira1, "/firmaMea/");

Tot in acest scop se poate limita numarul de servere spre care se transmite cookies, prin precizarea "domeniului valid" al lor. Parametrul "domeniu valid" poate cuprinde o singura masina (ex. "www.domeniulmeu.ro") sau mai multe (ex. ".domeniulmeu.ro" este valid si pentru www.domeniulmeu.ro dar si pentru hercules.domeniulmeu.ro etc.).

 setcookie ("user", "Horia", $expira1, "/firmaMea/", "www3.domeniulmeu.ro");

Daca in plus se doreste ca acel cookie sa fie trimis doar daca conexiunea este una securizata (protocolul este HTTPS in locul protocolului HTTP standard).

Pentru a sterge un cookie fortat dintr-o pagina se poate apela functia setcookie cu un singur parametru, si anume chiar numele cookie-ului respectiv. Trebuie avut in vedere doar ca aceasta functie nu poate fi apelata decat la inceputul paginii, inainte de orice iesire spre client.

 setcookie("user") // sterge cookie-ul cu numele "user"

Pentru a folosi informatiile cookies intr-o pagina PHP, acestea pot fi accesate prin intermediul tabloului $HTTP_COOKIE_VARS ["numeCookie"] (cau $_COOKIE["numeCookie"] in PHP4). Spre exemplu se poate verifica daca un cookie este primit sau nu prin secventa:

if ( !isset($HTTP_COOKIE_VARS ["utilizator"]) )
    die ( "Accesati aceasta pagina pentru prima data! Va rugam sa va inregistrati in prealabil." );

Observatie:un cookie nu este valabil in pagina care il seteaza ci doar in paginile care vor fi incarcate ulterior.

BackNext