Agora
Media
Libraria Byblos



AgoraNews  





PC Magazine Ro  




NET Report   




Ginfo   




agora ON line   





PC Concrete   





Liste de discuţii   




Cartea de oaspeţi   




Mesaje   





Agora   








Clic aici
PC Report - ultimul numar aparut


IPRO - PC Magazine Romania, August 2003
SOLUŢII PENTRU PROGRAMATORII ŞI DESIGNERII WEB

Prăjiturele: Cookies în CFML

(Cold Fusion Markup Language)

Alexandru Lazăr

Cookie-urile sunt deja un instrument obişnuit pentru toţi designerii web. Chiar fără să ştii, siturile pe care le accesezi curent folosesc aceste "prăjiturele" pentru vă face navigarea mai comfortabilă. Eu am început să apreciez aceste cookie-uri - recunosc, le consideram complet inutile - atunci când am văzut cum Yahoo! le foloseşte pentru paginile My Yahoo! scutindu-mă de introducerea la fiecare accesare a numelui de utilizator şi a parolei.

Astfel, am încercat să le şi folosesc şi eu. N-a fost greu - pentru că ele sunt suportate deja de JavaScript şi PHP, de exemplu - dar ce ne facem dacă avem un sit CFML? Ei bine, CFML poate folosi aceste cookie-uri, şi încă fără prea mare efort din partea programatorului.

EU VREAU CU CĂPŞUNI...

OK, de fapt nu vorbeam de acele "cookies" pe care le găsim la cofetărieJ. Cookie-urile noastre sunt fişiere text, stocate "undeva" pe hard-disk. Aceste fişiere conţin date - aparent fără nici o noimă - care pot stoca însă traseul parcurs pe un sit, bannerele publicitare pe care le-ai văzut, username-ul şi parola ta pentru a scăpa de fereastra cu "login" şi aşa mai departe. Spusesem mai sus că sunt fişiere text aparent fără nici o noimă. Iată cum arată un cookie pe care cei de la Tucows.com mi l-au strecurat pe hard-disk şi care conţine bannerele publicitare pe care le-am văzut:

NGUserID
d828206e-28726-1040126341-4
ads.tucows.com/
0
2189574144
32107986
2107712384
29095796
*

Cât se poate de clar, nu? :) Şi totuşi...

REŢETA

Înainte să te apuci de lucru, ar trebui să ai grijă ca browser-ul tău să accepte cookie-uri. Din motive de securitate, unii au grijă să le dezactiveze. Problema lor... au şi ei oarecum dreptate, dar pentru liniştea mea personală, configurează browser-ul web pe care îl foloseşti pentru a accepta cookie-uri. Oricum, vom realiza un mic program care va testa cât de permisiv este browser-ul celui ce accesează pagina.

În CFML, vom folosi tagul <cfcookie> pentru a scrie cookie-uri, şi apoi vom spune programului să le citească prin intermediul obiectului cookie. Ar trebui să fii atent ce şi cât stochezi în cookie-uri: browser-ele moderne au o limită cu privire la dimensiuni, şi în general e bine să fii econom cu aceste date pentru că unii devin suspicioşi când se trezesc cu cookie-uri de 300 kb. Aşadar, să luăm următorul exemplu:

<cfcookie
name = "color"
value = "red"
expires = "7"
secure = "No"
path = "/user/config"
domain = ".vitalstate.co.uk">

name = "color" spune browser-ului ce trebuie să stocheze în cookie. Acest atribut este necesar - în fond la ce ar folosi un cookie care nu stochează decât valori pentru nu_se_ştie_ce. Apoi, value = "red" informează browser-ul cu privire la valoarea variabilei "color". Acest atribut este opţional - nu toate "name"-urile trebuie să aibă şi valori.

Atributul expires este unul pe care îl vei folosi categoric, deoarece indică browser-ului când va expira cookie-ul. Deşi este opţional, valoarea lui implicită este "now", deci cookie-ul va fi şters imediat. Şi nu asta vrei, nu? Valoarea acestui atribut poate fi un număr de zile (ca aici), o dată anume (de exemplu 08/10/2003), "now" (şterge cookie-ul imediat) sau "never" (care lasă utilizatorului plăcerea de a şterge infamul fişier). Dacă laşi "No" ca valoare a tag-ului secure, este totul OK. În schimb, dacă browser-ul celui care accesează pagina nu suportă SSL (Secure Socket Layers) iar tag-ul are valoarea "Yes", cookie-ul nu va fi trimis. Mare atenţie însă: cookie-urile "sigure" nu funcţionează decât cu protocolul https://.

Atributul path defineşte URL-ul din cadrul domeniului unde cookie-ul este activ. În fine, domain specifică domeniul unde vor fi folosite cookie-urile. Atenţie însă, pentru că s-ar putea să te păcăleşti: este vorba, de fapt, de toate subdomeniile al căror nume se termină cu <domeniu>. Spre exemplu, cookie-ul din exemplul nostru va fi activ pentru www.vitalstate.co.uk dar şi pentru www.site.vitalstate.co.uk sau pentru www.site1.vitalstate.co.uk . Dacă <domeniu> se termină cu sufixul specific unei ţări (.ro, .us, .uk), trebuie să aibă în componenţă trei caractere [.], inclusiv cel de la început - când scrieţi domeniile, toate trebuie să înceapă cu [.], adică ".domeniu.sufix" şi nu simplu "domeniu.sufix". Nu poţi folosi o adresă IP pentru domeniu.

Mai există câteva lucruri care ar trebui ştiute: în primul rând, atenţie cum foloseşti tag-ul <cflocation>. Acesta redirecţionează utilizatorul, dar înainte ca pagina unde dorea să ajungă iniţial să fie încărcată. Browser-ul va scrie cookie-ul numai după ce a terminat de încărcat pagina. Aşa că dacă foloseşti <cflocation>, cookie-ul nu va fi scris.

De asemenea, cu riscul de a mă repeta - este un lucru pe care unii îl uită şi care le dă apoi de furcă - stochează numai strictul necesar de informaţii într-un cookie, pentru că protocolul HTTP impune o limită dimensiunilor unui cookie (poţi găsi specificaţiile HTTP la www.allaire.com/Handlers/index.cfm?ID=1471&Method=Full&Cache=)

TEST

Vom construi un program care testează dacă browser-ul utilizatorului "a auzit" de SSL (Secure Socket Layers).

Aşadar, mai întâi vom încerca să scriem un cookie. Vom folosi, la fel ca mai sus, tag-ul <cfcookie> pentru a scrie un cookie. Vom da atributului secure valoarea yes astfel încât cookie-ul să nu poată fi scris decât dacă browser-ul utilizatorului poate folosi SSL. Adică:

<!-- scrie cookie-ul -->
<!-- această porţiune de cod va intra într-un template -->
<cfcookie name="test" value="AcceptaSSL">

Dacă utilizatorul poate folosi SSL, cookie-ul va fi scris (din nou atenţie, pentru că aceste cookie-uri "sigure" funcţionează numai în cadrul protocolului https://).

Acum, vom cere programului să verifice dacă într-adevăr cookie-ul a fost scris. Pentru asta, vom folosi tag-ul <cfif> împreună cu IsDefined(), aceasta fiind cea mai elegantă metodă. În cazul în care utilizatorul are cookie-ul, atunci programul va afişa acest lucru. În caz contrar, va afişa faptul că utilizatorul nu acceptă cookie-uri. Aşadar:

<!-- Într-un template separat -->
<cfif IsDefined(Cookie.test)>
<cfif Cookie.test eq "AcceptaSSL">
<cfoutput> Utilizatorul acceptă cookie-uri</cfoutput>
<cfelse>
<cfoutput> Utilizatorul nu acceptă cookie-uri</cfoutput>
</cfif>
<cfelse>
<cfoutput>Utilizatorul nu acceptă cookie-uri</cfoutput>
</cfif>

Vezi că am verificat două lucruri: dacă cookie-ul a fost scris şi dacă valoarea variabilei "test" este "AcceptaSSL" (imaginează-ţi ce s-ar întâmpla dacă utilizatorul ar avea într-un cookie o variabilă "test" cu o valoare diferită decât cea setată de noi, evident că securitatea n-ar fi aceeaşi). De aceea există două tag-uri <cfelse>, deoarece <cfif> verifică şi prezenţa cookie-ului şi valoarea variabilei care a fost stocată în el.

Iată deci cum ar trebui să arate rezultatul final:

<!-- scrie cookie-ul -->
<!-- această porţiune de cod va intra într-un template -->
<cfcookie name="test" value="AcceptaSSL">
<!-- Într-un template separat -->
<cfif IsDefined(Cookie.test)> <cfif Cookie.test eq "AcceptaSSL">
<cfoutput> Utilizatorul acceptă cookie-uri</cfoutput>
<cfelse>
<cfoutput> Utilizatorul nu acceptă cookie-uri</cfoutput>
</cfif>
<cfelse>
<cfoutput>Utilizatorul nu acceptă cookie-uri</cfoutput>
</cfif>

MAI MULT...

Documentaţia Macromedia oferă foarte multe detalii, dar (cam ca şi manualele mele de la şcoală J) o poţi citi de zece mii de ori şi nu vei reuşi să construieşti ceva util cu ce scrie acolo. De aceea, există un excelent tutorial despre cookie-uri şi CFML la hotwired.lycos.com/webmonkey/00/29/index3a.html?tw=programming. Veţi găsi foarte mult suport din partea comunităţii CFML, aşa că nu îţi fie teamă să întrebi pe forumurile în temă. În plus, cookie-urile sunt una din părţile căreia i se potriveşte cel mai bine deviza "learn by doing". Le poţi găsi o infinitate de aplicaţii, de la eliminarea paginii de login şi până la posibilitatea utilizatorului de a configura aspectul paginii tale pentru calculatorul său - ceea ce elimină, de exemplu, problema celor care încearcă să vizualizeze pagini 800x600 în rezoluţii de 640x480. Aşa că la lucru, şi mult noroc!


PC Magazine Ro | CD ROM | Redactia | Abonamente | CautareArhive

Copyright © 1999-2002 Agora Media.

webmaster@pcmagazine.ro

LG - Life´s Good

www.agora.ro

deltafri

Concurs de Grafica Digitala si Web Design

www.agora.ro

www.agora.ro