• Përshëndetje Vizitor!

    Nëse ju shfaqet ky mesazh do të thotë se ju nuk jeni regjistruar akoma. Edhe pse nuk jeni regjistruar ju arrini të shihni pjesën me të madhe të seksioneve dhe diskutimeve të forumit, por akoma nuk gëzoni të drejten për të marrë pjesë në to dhe në avantazhet e të qënurit anëtar i këtij komuniteti. Ju lutem : REGJISTROHUNI që të dërgoni postime dhe mesazhe në Forum-Al.

    Regjistrohu !

“Cookies” dhe “Sessions” në PHP

Forum-Al

Aty ku shqiptarët mblidhen
Anëtar
Jan 5, 2010
Postime
560
Pikët
28
Vendndodhja
Forum
Si ç’mund ta dini apo imagjinoni, webi është një mjedis pa gjendje. Kjo do të thotë se çfarë ndodh në dritaren e shfletuesit nuk ruhet për t’u ripërdorur më pas, qoftë brenda një sesioni, apo kur e mbyllni fare dritaren. Për aplikacione ku nevojitet të ruhen informacione, të cilat më pas do të përdoren për të përmirësuar eksperiencën e vizitorit, të mos pasurit gjendje është problematike. Këtu hynë në lojë Cookies dhe Sessions.

Para se t’ju tregoj çfarë janë dhe si të përdoren në PHP, më duhet t’ju them se guida i drejtohet programuesëve fillestarë. Cookies dhe Sessions janë ndër bazat e programimit për web dhe kushdo që ka krijuar një aplikacion, me siguri i ka përdorur. Megjithatë, hidhini një sy artikullit në çfarëdo niveli të jeni, sepse ndoshta gjeni diçka që ju ka shpëtuar apo pse jo, të sugjeroni diçka që më ka shpëtuar mua


COOKIES

Cookies janë mënyra më e mirë për të ruajtur të dhëna afatgjatë direkt në kompjuterin e vizitorit. Për t’u realizuar, krijohet një skedar fare i vogël nga shfletuesi që në bazë përmban: ID – numër identifikimi, Emër, Vlerë, Datë Skadimi dhe Domaini ku është vendosur. Me këto të dhëna mund të krijohen Cookie me një emër identifikues për ta aksesuar, vlerë që përdoret në aplikacion dhe datë skadimi. Nëse kjo e fundit ka kaluar, Cookie konsiderohet e pavlefshme dhe duhet rivendosur nga aplikacioni. E bukura e Cookies është që janë lehtësisht të aksesueshme edhe nga Javascript dhe mund të përdorni një kombinim PHP/Javascript për të realizuar çfarëdo çmendurie që ju vjen ndërmend.

Nëse nuk e keni kuptuar mirë paragrafin më sipër, po tentoj t’ju a bëj më të qartë me një shembull. Supozojmë se kemi një aplikacion PHP ku vizitorët plotësojnë një formë, në të cilën mund të vendosin emrin e tyre. Pasi forma plotësohet, të dhënat ruhen në një Cookie dhe në faqe shfaqet një mesazh i tipit “Mirësevjen Fadion”. Nëse vizitori kthehet në faqe pas dy ditësh, aplikacioni do shohë se egziston një Cookie, do e lexojë dhe do shfaqi përsëri mesazhin e personalizuar me emrin e vizitorit. Nuk është shembull shumë realist, por shpresoj t’ju ketë dhënë idenë.

Kini parasysh diçka të rëndësishme për Cookie-t. Duke qenë se krijohen në kompjuterin e vizitorit, modifikimi i tyre është fare i lehtë. Prandaj, kurrë mos ruani të dhëna sensitive në to. Nëse patjetër ju duhet të ruani – psh kur doni të ofroni “mbajtjen mend” të fjalëkalimeve – sigurohuni të përfshini në Cookie një token (kod i gjeneruar) dhe të kontrolloni datën e ekspirimit. Siguria e Cookies është jashtë qëllimit të kësaj guide prezantuese, por online ka mjaft guida për temën. Gjithashtu, do të përfshihet edhe në një guidë të ardhme për sigurinë në PHP.

Le ta lëmë teorinë mënjanë dhe të shohim disa shembuj kodesh për të krijuar, lexuar dhe fshirë Cookie.

Krijimi i Cookies

PHP vjen me fasilitete për të krijuar Cookie, aq sa gjithçka rrotullohet në një funksion të vetëm që quhet setcookie(). Parametrat e funksionit shpjegohen mirë në manual, por për ata që nuk dinë mirë anglisht, po i shpjegoj unë.

setcookie(emri, vlera, skadimi, direktoria, domaini, e sigurt, vetëm HTTP)

Emri: Emri i identifikimit. Përmes këtij parametri do thërritet Cookie.
Vlera: Të dhënat që Cookie përmban.
Skadimi: Data kur Cookie skadon dhe konsiderohet e pavlefshme.
Direktoria: Direktoria në server ku Cookie quhet e vlefshme. Nëse vendoset “/”, Cookie mund të përdoret kudo. Nëse vendoset një direktori “/feniksi/”, Cookie do të jetë e vlefshme brenda direktorisë “feniksi” dhe çdo direktorie brenda saj. Nëse lihet pa vënë, Cookie është e vlefshme për direktorinë ku ndodhet skedari PHP.
Domaini: Domaini ku Cookie konsiderohet e vlefshme. Nëse doni që Cookie të aksesohet në një nën-domain të caktuar, vendoset “sub.domain.com”. Nëse doni që të aksesohet në të gjitha nën-domainet, vendoset “.domain.com”.
E Sigurt: Përcakton nëse Cookie do transmetohet përmes një lidhjeje të sigurt HTTPS.
Vetëm HTTP: E limiton aksesin e Cookie-t vetëm përmes protokollit HTTP. Nëse aktivizohet, kodi Javascript nuk do të ketë akses.

Me të pasur këto të dhëna, po ju tregoj sa e lehtë është të krijoni një Cookie.

Jam i sigurt që jeni shumë të qartë deri në parametrin e tretë, atë të vendosjes se datë së skadimit. Para se t’ju shpjegoj datën, vini re që më sipër kam shkruar formën më të thjeshtë për të krijuar një Cookie. Në pjesën më të madhe të rasteve në formë të tillë do e shkruani, sepse Direktorinë apo Domainin, të paktën sipas eksperiencës time, do i përdorni rallë. Dy parametrat e fundit janë akoma më të rrallë. Sidoqoftë, besoj e keni kuptuar tashmë që kam krijuar një Cookie me emër “faqja” dhe vlerë “feniksi”. Po ju shpjegoj çfarë kam shkruar tek data e skadimit.

Parametri i skadimit duhet vendosur si UNIX Timestamp. Funksioni time() kthen Timestamp aktuale, pra orën dhe datën e momentit që thërritet. Ajo që unë doja të bëja ishte vendosja e datës se skadimit pesë ditë më pas. Si rrjedhim:

time()+60 = 60 sekonda pas.
time() + 60*60 = time() + 3600 = 1 orë pas.
time() + 60*60*24 = time() + 3600 * 24 = 24 orë pas.
time() + 60*60*24*5 = time() + 3600 * 24 * 5 = 5 ditë pas.

Në shikim të parë duket friksuese, por kur e kuptoni idenë, do filloni ta përdorni gjithmonë. I gjithë veprimi prodhon numrin 432.000, i cili është edhe numri i sekondave që do kalojnë për të arritur pesë ditë. Mund ta shkruani edhe direkt gjithë atë numër nëse doni t’i bëni veprimet me makinë llogaritëse përpara.

Si ju thashë, forma që kam krijuar Cookie-n është më e thjeshta dhe ajo që do të përdorni në pjesën e madhe të rasteve. Megjithatë, po ju tregoj edhe një shembull ku përfshihen parametrat e Direktorisë dhe Domainit. Kodi më poshtë do të krijojë një Cookie që është e aksesueshmë në çdo direktori të serverit dhe në çdo nën-domain të “feniksi.com”.

Para se ta mbyll seksionin e krijimit të Cookie, duhet të keni parasysh diçka që mund t’ju shkaktojë shumë dhembje koke. Funksioni setcookie() duhet thërritur përpara se të jetë shfaqur në shfletues kod HTML. Në praktikë, kjo do të thotë se duhet ta thërrisni para çdo kodi HTML apo funksioni echo() në PHP. Arsyeja është sepse Cookie dërgohet nga serveri në shfletues si HTTP Header dhe nëse është printuar HTML, Header-at do jenë dërguar tashmë. Gabimi “Headers already sent” është goxha i famshëm midis fillestarëve dhe me pak kujdes nuk do ju marrë orë nga jeta juaj


Leximi i Cookies

Leximi i Cookies është proçedurë edhe më e thjeshtë se krijimi i tyre. Ekipi i PHP ka krijuar një vektor superglobal posaçërisht për Cookies. Vektori quhet $_COOKIES dhe duke përcaktuar emrin e tij si indeks vektori, mund të marrim vlerën e Cookie-t.

Shembulli më poshtë kontrollon nëse një Cookie egziston dhe nëse po, printon vlerën e saj. Kini parasysh që Cookie duhet të jetë brenda datës se skadimit për t’u quajtur e vlefshme. Nëse e ka kaluar, atëherë do konsiderohet sikur nuk egziston.

Fillimisht kam kontrolluar me funksionin isset() nëse Cookie egziston. Nëse po, atëherë printoj vlerën e Cookie-t, që në një mjedis të vërtetë do të ishte emri i ruajtur i vizitorit. Nuk ka më tepër për leximin e Cookies; si ç’ju thashë është proçedurë e thjeshtë, prandaj le të kalojmë në hapin e fundit – atë të fshirjes së Cookies.

Fshirja e Cookies

Fshirja e një Cookie është më tepër një truk se sa një metodë e vërtetë, sepse PHP nuk ofron ndonjë funksion. Megjithatë, si ç’do e shihni, është pothuajse i njëjti proçes me krijimin e tyre. I vetmi ndryshim është data e ekspirimit.

Truku qendron në vendosjen e datës prapa, në mënyrë që Cookie të ketë skaduar që në momentin e krijimit. Pjesa time()-3600 bën pikërisht këtë, duke marrë kohën aktuale dhe duke i zbritur 3600 sekonda (1 orë). Koha e zbritur mund të jetë çfarëdo vlere (edhe 1 sekondë), por ide e mirë është të jetë e madhe për të mënjanuar ndonjë diferencë orari midis serverit dhe vizitorit.

Kjo ishte gjithçka mbi Cookies dhe manipulimin e tyre. E vetmja gjë do kërkonte pak më tepër shpjegim është siguria, por kjo do të mbetet për një guidë tjetër. Ndërkohë eksperimentoni me krijimin dhe aksesimin e tyre për t’u ndjerë sa më “në shtëpi” dhe do jeni të gatshëm t’i implementoni në projekte menjëherë.

SESSIONS

Sessions, në konceptin bazë janë shumë të ngjashme me Cookies. Edhe ato shërbejnë për të ruajtur të dhëna që mund të përdoren më pas për t’i dhënë gjendje aplikacioneve. Por ka një ndryshim shumë të madh në teknologjinë nga pas. Ndryshe nga Cookies, Sessions ruhen në server dhe janë të përkohshme. Ruajtja në server zakonisht kryhet përmes disa skedarëve të vegjël ose në raste pak më të veçanta, direkt në databazë. Ideja është e njëjtë në të dyja rastet dhe ajo që ka rëndësi është fakti që Sessions nuk mund të modifikohen direkt nga vizitorët. Të qenurit të përkohshëm do të thotë se skadojnë pas një kohe të caktuar (psh 30 minuta) ose kur dritarja e shfletuesit mbyllet.

Në pjesën më të madhe të skenareve, Sessions janë zgjidhja më e mirë, edhe atëherë kur të dhënat nuk janë sensitive. Nëse janë sensitive, atëherë Sessions janë praktikisht zgjidhja logjike, meqë mundësia për t’i manipuluar është shumë më e vogël se sa me Cookies. Imagjinoni një aplikacion me panel administrimi ku administratori futet përmes një forme identifikimi. Kur të dhënat janë të sakta, për të ruajtur gjendjen e identifikuar dhe për të mos i nxjerrë administratorit formën e identifikimit kudo që shkon, kemi dy mundësi: Cookies dhe Sessions. Nëse do përdornim Cookies, sistemi do të duhej të ruante një kod sekret dhe një datë skadimi për çdo identifikim, në mënyrë që të mënjanojë Cookie-t e krijuara manualisht. Edhe me këto masa, Cookies janë të thjeshta të “vidhen” dhe nëse ndodh, sulmuesi ka akses direkt në panelin e administrimit, pa tentuar edhe të bëjë login. Nëse zgjedhim Sessions (duhet t’i zgjedhim!), sesioni është aktiv vetëm për një kohë të caktuar dhe duke qenë se ruhet në server, është praktikisht e pamundur të krijohet manualisht nga një sulmues.

Me të thënë këto, asnjë sistem nuk është 100% i sigurt dhe Sessions nuk janë përjashtim. Teknika si vjedhja dhe fiksimi i Sessions janë të njohura dhe përpjekjet për t’i parandaluar nuk i mënjanojnë plotësisht. Megjithatë, janë aq të rralla dhe të vështira për t’u egzekutuar sa në aplikacione normale nuk ja vlen të lodhesh.

Tani që besoj e keni kuptuar në teori çfarë janë Sessions, po ju tregoj çfarë na ofrohet në PHP për t’i krijuar dhe lexuar ato. Shikoni kodin më poshtë.

Ky është kodi që i tregojmë PHP-së se do të përdorim Sessions dhe në sfond, PHP bën veprimet e duhura për ti bërë Sessions të aksesueshëm. Nëse tentojmë të krijojmë apo lexojmë Sessions pa egzekutuar session_start(), nuk do të ndodhë asgjë. Prandaj, si pratikë e mirë, vendoseni këtë rresht në krye të faqeve kodit (edhe atij HTML) në faqet që doni të përdorni Sessions.

Krijimi dhe Leximi i Sessions


Ndryshe nga Cookies, për Sessions nuk ka nevojë të thërrasim funksione të veçanta për krijim. PHP ofron një vektor superglobal që ruan të dhënat e Sessions dhe përmes tij mund të krijomë dhe lexojmë. Proçedura është fare e thjeshtë, prandaj shikoni kodet më poshtë.

Me kodin më sipër kam thërritur vektorin superglobal $_SESSION dhe në të kam krijuar një indeks të quajtur “feniksi”. Emri i ndeksit këtu është i njëjtë me “emrin” në Cookies, ndërsa “vlera” është pjesa ku kam kaluar tekstin “Kerkoni guida?” në vektor. Analogjia me Cookies zë vend sepse edhe këtu kemi kombinimin “emër” dhe “vlerë”. Thjeshtë “emri” vendoset si indeks, ndërsa “vlera” si vlerë e elemtntit të vektorit. Më duket se përsërita veten në fjalinë e fundit, por të paktën shpreoj ta keni kuptuar.

Më sipër krijova një Session thjeshtë duke krijuar një indeks vektori. Leximi kryhet në të njëjtën formë, por në këtë rast duke printuar vektorin superglobal $_SESSION.

Si ç’e shihni, në egzaktësisht të njëjtën mënyrë krijojmë dhe lexojmë Sessions. Mjafton t’i japim vlerë një indeksi të vektorit superglobal $_SESSION dhe leximi kryhet thjeshtë duke thërritur atë indeks. Jam i sigurt që s’ka asgjë komplekse këtu.

Fshirja e Sessions

Ndryshe nga Cookie-t, ku thërrisnim setcookie() më datë skadimi në të shkuarën për ta fshirë, me Sessions është fare pak më komplekse. Arsyeja është sepse krahas indekseve që krijohen në vektorin superglobal $_SESSION, për të ruajtur Session ID (numrin identifikues për çdo sesion) përdoren Cookies. Mund të jetë paksa konfuze kjo pjesë, por më lini ta qartë qartësoj. Si ju thashë, Sessions ruhen në server. Por çdo Session ka një numër identifikues, të quajtur Session ID i cili nevojitet për të validuar sesionin. Pa një Session ID, sesioni quhet i pa vlerë dhe e njëjta gjë ndodh nëse Session ID nuk përputhet me ID-në e ruajtur në server. Që një Session të fshihet plotësisht, duhen fshirë indekset e vektorit dhe gjithashtu Cookie që mban Session ID.

Fillimisht po ju tregoj si të fshini një indeks të vektorit superglobal me funksionin unset(). Kjo mënyrë mund të përdoret nëse nuk doni të përdorni një indeks, por ta lini aktiv sesionin.

Kodi më sipër e fshin vlerën e indeksit “faqja”. Nëse duhet të rivendoset, mjafton t’i vihet vlera sërish. Nëse doni t’i fshini të gjitha indekset, por ta lini sesionin aktiv, atëherë një nga metodat më poshtë. Të gjitha janë njësoj të vlefshme.

Ju tregova si të fshini indekse në Session, por le të shohim një shembull pak më kompleks që fshin indekset dhe Cookie-n që mban ID-në e sesionit. Kodi ilustrohet në manualin e PHP-së dhe është shembulli më i mirë për të zhdukur tërësisht një Session.

Duke përdorur mënyrën e sipërme, fshijmë tërësisht një Session së bashku me çdo gjurmë që ai lë. Nuk është nevoja ta fiksioni të tërë kodin, por ruajeni diku (ose rikthehuni këtu në Feniksi) dhe përdoreni atëherë kur ju duhet si funksionalitet. Një rast i mirë është logout.

Përfundimi

Ju tregova si t’i jepni gjendje aplikacioneve tuaja duke përdorur dy metoda bazë, Cookies dhe Sessions. Ato që keni mësuar këtu duhet të jenë të mjaftueshme për t’i përdorur dhe të vetmet njohuri ekstra që ju nevojiten janë sa i përket sigurisë. Besoj se gjithçka ka qenë e thjeshtë të kuptohet, më tepër nga natyra e lehtë e temës se sa shpjegimi im


Nëse keni pyetje, sugjerime, kritika apo komente, jeni të ftuar t’i bëni më poshtë.

Mësim të mbarë.

“Cookies” dhe “Sessions” në PHP është një postim nga: Feniksi.Com - Thesari i Njohurive



Forum-Al.com
Aty ku shqiptarët mblidhen!
 
Top