Home » Resurse Web Design » Variabile cookie

 
 
 

Variabile cookie

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 utili¬zator. 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

160

preferinţele de vizualizare ale acestuia. Când utilizatorul revine la situl Web, variabi¬lele 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 sit 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”;

161

Crearea unei variabile cookie
Crearea unei variabile cookie este aproape la fel de simplă ca şi obţinerea accesu¬lui 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 varia¬bilei 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 ianua¬rie 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));

<Avertisment>
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.</avertisment>

<Sfatul specialistului>
Î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

162

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.
</sfatul specialistului>

Ş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ţă.

<Test „la minut”>
• Care este variabila PHP folosită pentru a include numele fiecărei variabile cookie disponibile?
• Care este funcţia utilizată pentru crearea unei variabile cookie?
• Care este funcţia folosită pentru ştergerea unei variabile cookie?
</Test „la minut”>

<notă>
Răspunsuri la test:
• $HTTP_COOKIE_VARS setcookie()|setcookie() |
• setcookie()
• setcookie()
</notă>

163

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 utili¬zare 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);

164

// 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.

<Avertisment>
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. </Avertisment>

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, scriptu¬rilor 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 argu¬mentului cale.

165

<Avertisment.>
O complicaţie în utilizarea argumentului cale o constituie modalitatea de identificare a numelor cataloagelor. Specificând „/-test/” ca valoarea argumentului cale, variabila cookie va deveni disponibilă în /-test1, /-test2 şi în toate cataloagele cu nume similare, pe lângă catalogul /-test şi sub-cataloagele sale. </Avertisment.>

Dacă nu este specificat nici un argument domeniu, o variabilă cookie este disponi¬bilă numai pentru scripturile rezidente pe serverul Web care a creat variabila respec¬tivă. Argumentul domeniu vă permite să specificaţi numele de domeniu asociat unei variabile cookie. În consecinţă, variabila cookie va fi disponibilă numai pentru siturile Web din cadrul domeniului specificat. De exemplu, să presupunem că un script din serverul Web http://www.subdomeniu.domeniu.com creează o variabilă cookie. În mod prestabilit, variabila cookie este disponibilă numai pentru gazda respectivă. Cu toate acestea, puteţi face variabila cookie disponibilă pe întreg domeniul subdomeniu.domeniu.com, specificând „subdomeniu.domeniu.com” ca valoare a argumentului domeniu.

<Sugestie>
Specificaţia Netscape pentru variabile cookie (http://www.netscape.com/newsref/std/cookie_spec.html) impune ca argumentul domeniu să conţină minimum două caractere punct. Ca atare, nu trebuie să specificaţi un şir de tipul „domeniu.com” ca valoare a argu¬mentului domeniu.
Argumentul sigur este o valoare întreagă, care specifică dacă variabila cookie trebuie trimisă prin intermediul unei conexiuni sigure (HTTPS). Specificaţi valoarea l pentru a împiedica transmiterea variabilei cookie în cazul în care conexiunea nu este sigură; pentru a permite transmiterea variabilei cookie prin conexiuni HTTP obişnuite, specificaţi valoarea 0. </Sugestie>

<Sfatul specialistului>
Întrebare:    Dacă o persoană cu acces la unitatea de hard-disc a utilizatorului poate citi valorile stocate într-o variabilă cookie, cum se poate păstra confidenţialitatea informaţiilor stocate în această variabilă?
Răspuns:    Deoarece browserele stochează variabilele cookie în unitatea de hard-disc locală, utilizatorii unui sistem pot obţine accesul la fişierele cookie şi pot citi sau chiar modifica informaţiile conţinute în fişierele respective. O modali¬tate de a preveni situaţia prezentată constă în criptarea datelor stocate în variabi¬lele cookie. Pentru aceasta, puteţi folosi funcţiile Mcrypt din PHP. Funcţiile în cauză sunt incluse în biblioteca libmcrypt, care nu face parte din versiunea instalată

166

în mod prestabilit a limbajului PHP; deci, este posibil să fiţi obligat a solicita administratorului dumneavoastră de sistem să instaleze biblioteca şi să configureze PHP astfel încât să fie capabil să obţină accesul la aceasta. Pentru informaţii despre instalarea şi utilizarea funcţiilor Mcrypt, vezi adresa http://www.php.net.
</Sfatul specialistului>

<Avertisment>
Deşi argumentele expirare şi cale ale funcţiei setcookie () sunt opţionale, unele versiuni ale principalelor browsere prezintă erori care le determină să refuze variabilele cookie dacă aceste argumente nu sunt specificate. Ca atare, în general este recomandat să specificaţi aceste argumente. </Avertisment>

<Test „la minut”>
• Care este numărul de valori care pot fi asociate unui fişier cookie?
• Care este funcţia folosită pentru codificarea unui tablou astfel încât unei variabile cookie să-i poată fi asociate mai multe valori?
• Pentru a indica faptul că o variabilă cookie trebuie să fie trimisă numai prin intermediul unei conexiuni sigure (HTTPS), care este valoarea pe care trebuie să o primească argumentul sigur al funcţiei setcookie()?</Test „la minut”>

Proiect 10-1: O pagină de deschidere a sesiunii de lucru
În cadrul acestui proiect, veţi construi o pagină HTML şi un script PHP care permit unui utilizator să deschidă sesiunea de lucru cu un sistem. Pagina permite utilizatorului să introducă un identificator de utilizator şi o parolă, care sunt autentificate de script prin confruntarea cu un set stocat de identificatori de utilizator şi parole corecte. Dacă autentificarea utilizatorului reuşeşte, scriptul configurează o variabilă cookie care indică scripturilor ulterioare că utilizatorul a fost autentificat.

Scopurile proiectului
• Prezentarea unei aplicaţii a variabilelor cookie
• Prezentarea modului de creare a unei pagini simple de deschidere a sesiunii de lucru şi a  unui script

Pas cu pas
1. Plasaţi următorul script PHP într-un fişier numit p-10-1.php şi încărcaţi acest fişier în serverul dumneavoastră PHP:
<notă>
Răspunsuri la test:
• 20
• serialize()
• l
</notă>

167

<?
$parole = array(„mihai”   =>”portocala”,

„stefan”=>”cartof”,

„andrei”  =>”arahida”);
if ($parola == $parole[$nume_utilizator])
{

setcookie(„nume_utilizator”, $ nume_utilizator, time()+1200);

echo „<H2>Accesul este permis.</H2>”;
}
else
{

setcookie(„nume_utilizator „, „”, time()-3600);

echo „<H2>Nume de utilizator sau parola incorecte: accesul interzis.</H2>”;
}
?>

2. Plasaţi următorul text HTML într-un fişier denumit p-10-1 .html şi încărcaţi acest fişier în serverul dumneavoastră, inserându-l în acelaşi catalog ca şi fişierul 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. Alocaţi un timp studiului scriptului PHP. Remarcaţi că acesta autentifică datele introduse de utilizator comparându-le cu valorile stocate într-un tablou, într-o aplicaţie din lumea reală, valorile corecte sunt, mai probabil, stocate într-o bază de date. Intr-un modul ulterior veţi învăţa care este modul de lucru cu bazele de date.
4. De asemenea, remarcaţi că variabila cookie este configurată astfel încât să expire în 20 de minute. Scripturile ulterioare pot reiniţializa momentul expirării variabilei cookie, astfel încât autentificarea utilizatorului să nu fie anulată în timp ce acesta lucrează. Totuşi, dacă utilizatorul încetează să mai folosească sistemul, momentul expirării variabi¬lei cookie va garanta că utilizatorul este automat scos din sistem după 20 de minute. Aceasta contribuie la evitarea breşelor de securitate generate de utilizatori care părăsesc o sesiune de lucru.
5. Orientaţi un browser Web spre adresa URL a fişierului HTML încărcat anterior. Ecranul browserului trebuie să fie asemănător celui prezentat pe pagina următoare, în stânga. Introduceţi un identificator de utilizator şi o parolă şi executaţi clic pe butonul „Trimite”.
6. Scriptul verifică datele pe care le-aţi introdus. Dacă aţi introdus un identificator de utilizator şi o parolă corecte, trebuie să vedeţi un ecran asemănător celui prezentat pe pagina următoare, în dreapta; în caz contrar, veţi vedea un ecran care conţine un mesaj de eroare.

168

<ECRAN>
Project 10-l: LoginPage
<câmpuri>
UserName:
Password:
</câmpuri>
<buton>Submit</buton>
</ecran>

<ecran>
Access granted. </ecran>

<Test de evaluare>
1. Scrieţi o instrucţiune PHP care creează o variabilă cookie denumită corect,
care are valoarea „false”; stabiliţi ca variabila cookie să expire în 30 de minute.
2. Scrieţi o instrucţiune PHP care şterge o variabilă cookie denumită trecut.
3. Scrieţi o instrucţiune PHP care afişează valoarea variabilei cookie denumite vârsta.
4. Scrieţi o instrucţiune PHP care împachetează tabloul numit $continut într-un şir denumit $x.
5. Scrieţi o instrucţiune PHP care creează o variabilă cookie numită oriunde, care are valoarea „aici”. Variabila cookie trebuie să expire în 30 de minute şi trebuie să fie accesibilă în fiecare catalog al arborelui Web.

Eticheta:

Comentariile sunt inchise

Ne pare rau, dar nu poti lasa un comentariu pentru acest post.

Resurse web design