r6s1sd
<titlu>
Lucrul cu date stocate</titlu>
<titlu>Modulul 10:
Utilizarea variabilelor cookie</titlu>
<titlu>Scopuri</titlu>
• invatati care este modul de functionare a variabilelor cookie
• invatati sa creati, sa obtineti accesul la variabilele cookie
si sa le stergeti
• invatati sa stocati mai multe valori intr-o variabila cookie
• invatati sa specificati optiunile dintr-o variabila cookie
Acest modul va prezinta notiunile introductive referitoare la variabilele de
date cookie, o caracteristica HTTP care va permite sa stocati date in
sistemul unui utili¬zator. Variabilele cookie sunt utile pentru stocarea
preferintelor utilizatorilor si a altor informatii care trebuie retinute atunci
cand utilizatorul trece la o noua pagina Web.
<titlu>Accesul la variabilele cookie si crearea acestora</titlu>
Valorile majoritatii variabilelor dispar atunci cand scriptul PHP care
le contine isi incheie executia. Spre deosebire de acestea, valorile
variabilelor cookie se pot pastra un timp indefinit. Pentru ca valorile lor
sa se poata pastra, browserul utilizatorului stocheaza variabilele cookie in
unitatea de hard-disc locala a utilizatorului.
Variabilele cookie sunt utile dintr-o multime de puncte de vedere. De exemplu,
multe situri Web folosesc variabile cookie pentru a stoca identitatea utilizatorului
si
preferintele de vizualizare ale acestuia. Cand utilizatorul revine la
situl Web, variabi¬lele cookie permit browserului sa recunoasca utilizatorul
si sa restaureze optiunile sitului selectate de catre utilizator.
Din pacate, variabilele cookie nu constituie solutia perfecta pentru un mediu
de stocare pe termen lung si prezinta o serie de dezavantaje. De exemplu:
• Un utilizator poate dezactiva variabilele cookie prin stabilirea unei
optiuni a browserului
• in anumite situatii, variabilele cookie pot fi vizualizate de
alti utilizatori decat utilizatorul ale carui date le stocheaza
• Un sit poate stoca numai 20 de variabile cookie si numai 4KB de informatii
in unitatea de hard-disc locala a utilizatorului
• Numeroase versiuni ale browserelor frecvent folosite au erori care le
impiedica sa foloseasca variabilele cookie in mod adecvat
In ciuda acestor dezavantaje, variabilele cookie raman cea mai populara
tehnica pentru obtinerea unui mediu de stocare pe termen lung. Deci, este important
sa intelegeti care este modul de functionare si de utilizare a acestora.
<titlu>Accesul la o variabila cookie</titlu>
Poate ca trasatura cea mai caracteristica a variabilelor cookie o constituie
comoditatea. Daca ati creat o variabila cookie, valoarea acesteia este automat
pusa la dispozitie ca variabila PHP avand acelasi nume cu acela al variabilei
cookie. De exemplu, sa presupunem ca ati creat o variabila cookie denumita fruct
si ca ii atribuiti valoarea banana. Aceasta pereche nume-valoare este
apoi pusa la dispozitia fiecarui script PHP asociat sitului dumneavoastra de
Web. Deci puteti afisa valoare variabilei cookie folosind urmatoarea instructiune:
Echo „Valoarea variabilei cookie este $fruct.”;
Aceasta instructiune are ca efect afisarea urmatorului rezultat:
Valoarea variabilei cookie este banana.
Variabila PHP de tip tablou asociativ HTTP_COOKIE_VARS contine numele si valoarea
fiecarei variabile cookie curenta. Daca doriti sa vizualizati fiecare variabila
cookie disponibila si valoarea acesteia, puteti invoca functia phpinfo(), care
afiseaza valoarea tabloului HTTP_COOKIE_VARS. Daca doriti sa obtineti acces
la tablou prin metode programatice, puteti folosi un program ca urmatorul:
Foreach($HTTP_COOKIE_VARS as $nume => $valoare)
Echo „<BR>$nume => $valoare”;
<titlu>Crearea unei variabile cookie</titlu>
Crearea unei variabile cookie este aproape la fel de simpla ca si obtinerea
accesu¬lui la aceasta. Pentru a crea o variabila cookie, invocati functia
setcookie(), care are urmatoarea forma:
setcookie(nume, valoare, expirare)
Argumentul nume specifica numele variabilei cookie, iar argumentul valoare
specifica valoarea variabilei. Argumentul expirare indica momentul expirarii
varia¬bilei cookie; dupa ora specificata, variabila cookie nu mai este accesibila.
In general, este convenabil sa se specifice momentul expirarii folosind
functia time(), care returneaza intervalul de timp (exprimat in secunde)
scurs de la 1 ianua¬rie 1970. Puteti adauga o valoare de tip decalaj (offset),
care specifica intervalul de timp pe durata caruia variabila cookie trebuie
sa fie accesibila. De exemplu, sa luam in considerare urmatoarea instructiune:
setcookie(„fruct”, „banana”, time()+3600);
Aceasta instructiune creeaza o variabila cookie denumita fruct, care are valoarea
banana. Variabila cookie va fi disponibila timp de o ora (3600 secunde) de la
crearea sa.
Daca preferati, puteti specifica momentul expirarii folosind functia mktime
(). Aceasta functie are urmatoarea forma:
mktime(ore,minute,secunde,luna,zi,an)
De exemplu, urmatoarea instructiune creeaza o variabila cookie care expira
la o secunda dupa miezul noptii primei zile a anului 2005:
Setcookie(„fruct”, „banana”, mktime(0, 0, 1, 1, 1,
2005));
<Avertisment>
Valorile variabilelor cookie sunt trimise de catre browser ca parte a antetelor
HTTP. Ca atare, valorile variabilelor cookie trebuie sa fie stabilite anterior
expedierii oricaror altor valori catre browser. Trimiterea fie si a unui singur
spatiu va poate impiedica sa configurati valoarea unei variabile cookie.
Pentru a evita problemele, asigurati-va ca un script PHP care stabileste o valoare
a unei variabile cookie este plasat in partea superioara a fisierului,
fara caractere de tip spatiu alb care sa-l preceada. De asemenea, stabiliti
valoarea variabilei cookie inainte de a executa o instructiune echo sau
o alta instructiune PHP care trimite browserului date de iesire.</avertisment>
<Sfatul specialistului>
Intrebare: Ce este un antet HTTP?
Raspuns: inainte de a trimite date HTML unui browser, un server Web trimite,
in general, unul sau mai multe antete HTTP; aceste antete sunt cunoscute
sub numele de antete de raspuns al serverului. Similar, inainte de a
trimite informatii unui server Web, un browser Web trimite, in general,
unul sau mai multe antete HTTP; aceste antete sunt cunoscute sub numele de antete
de cerere. Antetele de raspuns al serverului frecvent folosite descriu configuratia
serverului si furnizeaza informatii referitoare la adresa URL solicitata de
client. Antetele de cerere utilizate de obicei descriu configuratia clientului
si formatele de date acceptabile de catre client.
In afara de antetele de raspuns al serverului si de antetele de cerere,
protocolul HTTP foloseste antete generale si antete de entitate. Antetele generale
sunt folosite atat de catre clienti, cat si de catre servere, pentru
a specifica informatii precum data curenta si optiunile de conexiune. Antetele
de entitate descriu formatul datelor schimbate de un client si un server.
</sfatul specialistului>
<titlu>Stergerea unei variabile cookie</titlu>
Deoarece o variabila cookie are o data de expirare, aceasta va fi stearsa automat
la un oarecare interval de timp dupa crearea sa. Totusi, puteti sterge o variabila
cookie imediat. Pentru aceasta, fixati momentul expirarii variabilei cookie
la un moment de timp din trecut. De exemplu, pentru a sterge o variabila cookie
denumit fruct, puteti folosi urmatoarea instructiune:
Setcookie(„fruct”, „”, time()-3600);
Aceasta instructiune stabileste timpul de expirare cu o ora (3600 de secunde)
in urma. Remarcati ca valoarea variabilei cookie este exprimata sub forma
unui sir vid; din moment ce variabila cookie nu va mai fi disponibila, valoarea
sa nu mai are importanta.
<Test „la minut">
• Care este variabila PHP folosita pentru a include numele fiecarei variabile
cookie disponibile?
• Care este functia utilizata pentru crearea unei variabile cookie?
• Care este functia folosita pentru stergerea unei variabile cookie?
</Test „la minut">
<nota>
Raspunsuri la test:
• $HTTP_COOKIE_VARS setcookie()|setcookie() |
• setcookie()
• setcookie()
</nota>
<titlu>Tehnici avansate de utilizare a variabilelor cookie</titlu>
Aceasta sectiune prezinta unele tehnici mai avansate pentru lucrul cu variabile
cookie. Prima sub-sectiune explica modul de stocare a mai mult de 20 de valori
intr-o singura variabila cookie. Cea de-a doua sub-sectiune explica modul
de utili¬zare a mai multor argumente suplimentare ale functiei setcookie
().
<titlu>Stocarea mai multor valori intr-o variabila cookie</titlu>
Deoarece un sit Web poate stoca numai 20 de variabile cookie in sistemul
unui utilizator, capacitatea de a stoca mai multe valori intr-o singura
variabila cookie este utila, in conformitate cu manualul PHP pe suport
electronic, puteti realiza acest lucru prin specificarea unui tablou ca nume
al variabilei cookie. De exemplu, puteti folosi un program ca acesta:
//Un exemplu eronat de variabila cookie cu mai multe valori for ($i = 0; $i < 30; $i++)
A setcookie(„cookiesa$ii”, „$i”);
S
(isset($cookies))
A foreach ($cookies as $i => $cookie)
A echo „<BR>$i => $cookie”;
S
S
Din pacate, acest procedeu nu functioneaza. Contrar informatiilor din manualul
PHP, fiecare element al tabloului este stocat intr-o variabila cookie
separata. Astfel, prin utilizarea acestui procedeu nu puteti stoca mai mult
de 20 de valori.
Pe de alta parte, stocarea mai multor valori intr-o singura variabila
cookie este posibila. Pentru aceasta, inserati valorile intr-un tablou
si folositi functia serialize() pentru a „impacheta" elementele
tabloului intr-un sir; ulterior, puteti recupera valoarea tabloului folosind
functia unserialize(). Iata un exemplu care prezinta modul de creare a unei
variabile cookie care contine mai multe valori, precum si modul de acces la
aceasta:
// Se creeaza un tablou for ($i = 0; $i < 30; $i++)
A
$tabloua$ii=$i;
S
// 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))
A
//Se despacheteaza valoarea variabilei cookie
$tablou = unserialize(stripslashes($cookies));
// Demonstreaza ca totul este in ordine,
// prin afisarea elementelor tabloului foreach ($tablou as $i => $cookie)
A echo „<BR>$i => $cookie”;
S
S
Functia stripslashes() este folosita pentru eliminarea secventelor escape adaugate
la sir atunci cand valoarea variabilei cookie este returnata de PHP.
<Avertisment>
Desi acest procedeu reuseste sa ocoleasca limita celor 20 de variabile cookie,
nu poate depasi limita celor 4KB de date stocate intr-o variabila cookie
pentru fiecare sit Web in parte. Daca doriti sa stocati mai mult de 4KB
de date, trebuie sa stocati datele intr-o baza de date pe parte de server
sau intr-un alt loc decat o variabila cookie. </Avertisment>
<titlu>Specificarea accesului la o variabila cookie si alte optiuni</titlu>
Functia setcookie() poate prelua maximum sase argumente, inclusiv trei argumente
despre care nu am discutat inca. Iata formatul complet al functiei setcookie():
setcookie(nume, valoare, expirare, cale, domeniu, sigur)
Argumentele nume, valoare si expirare au fost descrise in sectiunea precedenta
a acestui modul.
Argumentul cale va permite sa specificati calea URL asociata variabilei cookie.
In mod prestabilit, variabila cookie este disponibila pentru scripturile
din catalogul care contine scriptul in care a fost configurata variabila
respectiva, precum si pentrul scripturile din sub-cataloagele aferente catalogului
respectiv. In particular, scriptu¬rilor din cataloagele parinte ale
catalogului care contine scriptul nu li se permite accesul prestabilit la variabila
cookie.
Pentru a pune variabila cookie la dispozitia scripturilor dintr-un anumit catalog
din sub-cataloagele sale, specificati o valoare a argumentului cale. De exemplu,
pentru a pune variabila cookie la dispozitia intregului arbore de cataloage,
specificati " /" ca valoare a argumentului cale; pentru a face variabila
cookie disponibila in catalogul /-test si in sub-cataloagele sale,
specificati "/-test/" ca valoare a argu¬mentului cale.
<Avertisment.>
O complicatie in utilizarea argumentului cale o constituie modalitatea
de identificare a numelor cataloagelor. Specificand "/-test/"
ca valoarea argumentului cale, variabila cookie va deveni disponibila in
/-test1, /-test2 si in toate cataloagele cu nume similare, pe langa
catalogul /-test si sub-cataloagele sale. </Avertisment.>
Daca nu este specificat nici un argument domeniu, o variabila cookie este disponi¬bila
numai pentru scripturile rezidente pe serverul Web care a creat variabila respec¬tiva.
Argumentul domeniu va permite sa specificati numele de domeniu asociat unei
variabile cookie. In consecinta, variabila cookie va fi disponibila numai
pentru siturile Web din cadrul domeniului specificat. De exemplu, sa presupunem
ca un script din serverul Web https://www.subdomeniu.domeniu.com creeaza o variabila
cookie. In mod prestabilit, variabila cookie este disponibila numai pentru
gazda respectiva. Cu toate acestea, puteti face variabila cookie disponibila
pe intreg domeniul subdomeniu.domeniu.com, specificand "subdomeniu.domeniu.com"
ca valoare a argumentului domeniu.
<Sugestie>
Specificatia Netscape pentru variabile cookie (https://www.netscape.com/newsref/std/cookie_spec.html)
impune ca argumentul domeniu sa contina minimum doua caractere punct. Ca atare,
nu trebuie sa specificati un sir de tipul "domeniu.com" ca valoare
a argu¬mentului domeniu.
Argumentul sigur este o valoare intreaga, care specifica daca variabila
cookie trebuie trimisa prin intermediul unei conexiuni sigure (HTTPS). Specificati
valoarea l pentru a impiedica transmiterea variabilei cookie in
cazul in care conexiunea nu este sigura; pentru a permite transmiterea
variabilei cookie prin conexiuni HTTP obisnuite, specificati valoarea 0. </Sugestie>
<Sfatul specialistului>
Intrebare: Daca o persoana cu acces la unitatea de hard-disc a utilizatorului
poate citi valorile stocate intr-o variabila cookie, cum se poate pastra
confidentialitatea informatiilor stocate in aceasta variabila?
Raspuns: Deoarece browserele stocheaza variabilele cookie in unitatea
de hard-disc locala, utilizatorii unui sistem pot obtine accesul la fisierele
cookie si pot citi sau chiar modifica informatiile continute in fisierele
respective. O modali¬tate de a preveni situatia prezentata consta in
criptarea datelor stocate in variabi¬lele cookie. Pentru aceasta,
puteti folosi functiile Mcrypt din PHP. Functiile in cauza sunt incluse
in biblioteca libmcrypt, care nu face parte din versiunea instalata
in mod prestabilit a limbajului PHP; deci, este posibil sa fiti obligat
a solicita administratorului dumneavoastra de sistem sa instaleze biblioteca
si sa configureze PHP astfel incat sa fie capabil sa obtina accesul
la aceasta. Pentru informatii despre instalarea si utilizarea functiilor Mcrypt,
vezi adresa https://www.php.net.
</Sfatul specialistului>
<Avertisment>
Desi argumentele expirare si cale ale functiei setcookie () sunt optionale,
unele versiuni ale principalelor browsere prezinta erori care le determina sa
refuze variabilele cookie daca aceste argumente nu sunt specificate. Ca atare,
in general este recomandat sa specificati aceste argumente. </Avertisment>
<Test „la minut">
• Care este numarul de valori care pot fi asociate unui fisier cookie?
• Care este functia folosita pentru codificarea unui tablou astfel incat
unei variabile cookie sa-i poata fi asociate mai multe valori?
• Pentru a indica faptul ca o variabila cookie trebuie sa fie trimisa
numai prin intermediul unei conexiuni sigure (HTTPS), care este valoarea pe
care trebuie sa o primeasca argumentul sigur al functiei setcookie()?</Test
„la minut">
<titlu>Proiect 10-1: O pagina de deschidere a sesiunii de lucru</titlu>
In cadrul acestui proiect, veti construi o pagina HTML si un script PHP
care permit unui utilizator sa deschida sesiunea de lucru cu un sistem. Pagina
permite utilizatorului sa introduca un identificator de utilizator si o parola,
care sunt autentificate de script prin confruntarea cu un set stocat de identificatori
de utilizator si parole corecte. Daca autentificarea utilizatorului reuseste,
scriptul configureaza o variabila cookie care indica scripturilor ulterioare
ca utilizatorul a fost autentificat.
<titlu>Scopurile proiectului</titlu>
• Prezentarea unei aplicatii a variabilelor cookie
• Prezentarea modului de creare a unei pagini simple de deschidere a sesiunii
de lucru si a unui script
<titlu>Pas cu pas</titlu>
1. Plasati urmatorul script PHP intr-un fisier numit p-10-1.php si incarcati
acest fisier in serverul dumneavoastra PHP:
<nota>
Raspunsuri la test:
• 20
• serialize()
• l
</nota>
<?
$parole = array("mihai" =>"portocala",
"stefan"=>"cartof",
"andrei" =>"arahida"); if ($parola == $parolea$nume_utilizatori)
A setcookie("nume_utilizator", $ nume_utilizator, time()+1200); echo "<H2>Accesul este permis.</H2>";
S else
A setcookie("nume_utilizator ", "", time()-3600); echo "<H2>Nume de utilizator sau parola incorecte: accesul interzis.</H2>";
S
?>
2. Plasati urmatorul text HTML intr-un fisier denumit p-10-1 .html si
incarcati acest fisier in serverul dumneavoastra, inserandu-l
in acelasi catalog ca si fisierul p-10-1 .php:
<HTML>
<HEAD>
<TITLE>Proiect 10-1</TITLE>
</HEAD>
<BODY>
<FORM METHOD=”POST” ACTION=”p-10-1.php”>
<H2>Proiect 10-1: Pagina de login</H2>
<BR><BR>
Numele utilizatorului:
<BR><INPUT TYPE=”PASSWORD” NAME=”parola” SIZE=”16”>
<BR><BR><BR><BR>
<INPUT TYPE=”SUBMIT” VALUE=”Trimite”>
</FORM>
</BODY>
</HTML>
3. Alocati un timp studiului scriptului PHP. Remarcati ca acesta autentifica
datele introduse de utilizator comparandu-le cu valorile stocate intr-un
tablou, intr-o aplicatie din lumea reala, valorile corecte sunt, mai probabil,
stocate intr-o baza de date. Intr-un modul ulterior veti invata
care este modul de lucru cu bazele de date.
4. De asemenea, remarcati ca variabila cookie este configurata astfel incat
sa expire in 20 de minute. Scripturile ulterioare pot reinitializa momentul
expirarii variabilei cookie, astfel incat autentificarea utilizatorului
sa nu fie anulata in timp ce acesta lucreaza. Totusi, daca utilizatorul
inceteaza sa mai foloseasca sistemul, momentul expirarii variabi¬lei
cookie va garanta ca utilizatorul este automat scos din sistem dupa 20 de minute.
Aceasta contribuie la evitarea breselor de securitate generate de utilizatori
care parasesc o sesiune de lucru.
5. Orientati un browser Web spre adresa URL a fisierului HTML incarcat
anterior. Ecranul browserului trebuie sa fie asemanator celui prezentat pe pagina
urmatoare, in stanga. Introduceti un identificator de utilizator
si o parola si executati clic pe butonul „Trimite".
6. Scriptul verifica datele pe care le-ati introdus. Daca ati introdus un identificator
de utilizator si o parola corecte, trebuie sa vedeti un ecran asemanator celui
prezentat pe pagina urmatoare, in dreapta; in caz contrar, veti
vedea un ecran care contine un mesaj de eroare.
<ECRAN>
Project 10-l: LoginPage
<campuri>
UserName:
Password:
</campuri>
<buton>Submit</buton>
</ecran>
<ecran>
Access granted. </ecran>
<Test de evaluare>
1. Scrieti o instructiune PHP care creeaza o variabila cookie denumita corect, care are valoarea "false"; stabiliti ca variabila cookie sa expire
in 30 de minute.
2. Scrieti o instructiune PHP care sterge o variabila cookie denumita trecut.
3. Scrieti o instructiune PHP care afiseaza valoarea variabilei cookie denumite
varsta.
4. Scrieti o instructiune PHP care impacheteaza tabloul numit $continut
intr-un sir denumit $x.
5. Scrieti o instructiune PHP care creeaza o variabila cookie numita oriunde,
care are valoarea "aici". Variabila cookie trebuie sa expire in
30 de minute si trebuie sa fie accesibila in fiecare catalog al arborelui
Web.