Sesiuni in PHP 1
Sesiunile, reprezinta o functionalitate prin care anumite informatii sunt mentinute de la o pagina la alta. O sesiune dureaza atat timp cat utilizatorul acceseaza un site si se incheie odata cu inchiderea browserului.
Requesturi stateless si necesitatea sesiunilor
Accesarea unei pagini web este o operatie de sine statatoare (stateless, sau fara stare). Asta inseamna ca orice accesare ulterioara a aceleiasi pagini (spre exemplu un refresh) se va face fara ca serverul "sa stie" de accesarile anterioare. La fel se intampla si atunci cand sunt accesate mai multe pagini diferite una dupa alta.
Spre exemplu, daca un utilizator acceseaza pagina a.php si apoi b.php, codul PHP din a doua pagina (b.php) nu poate sti ce "s-a intamplat" in a.php. Sa luam urmatorul exemplu: in a.php se defineste o variabila ca mai jos
$text = 'Mesaj din prima pagina';
In b.php exista o bucata de cod care afiseaza variabila $text
echo $text;
Datorita naturii stateless a requesturilor pagina b.php nu va afisa nimic, intrucat variabilele si toate operatiunile executate in pagina a.php nu se pastreaza de la o cerinta la alta. In mod implicit nu exista nici o modalitate de a face legatura intre cele doua accesari, si prin urmare informatiile de pe prima pagina "traiesc" doar in cadrul accesarii paginii respective si se pierd cand executia scriptului din a.php se termina.
Acest design poate ridica probleme, in special in aplicatiile complexe, pentru ca informatiile nu persista de la o pagina la alta. Este adevarat ca exista cateva moduri prin care mici cantitati de date pot fi transmise catre o alta pagina - spre exemplu, prin formulare (vezi lectia Formulare in PHP), dar acestea nu sunt viabile pentru aplicatii mari, cum ar fi o aplicatie de email, sau un site e-commerce. Din fericire, PHP ofera posibilitatea de a persista informatiile pe parcursul navigarii, prin intermediul sesiunilor (sessions).
Sesiuni in PHP
In PHP o sesiune reprezinta perioada de timp in care mai multe scripturi PHP, accesate la momente diferite de timp, pot stoca si folosi informatii comune. O sesiune incepe atunci cand un script apeleaza functia session_start si se termina atunci cand utilizatorul inchide browserul (exista si alte modalitati de a porni o sesiune, dar nu sunt prea uzuale - folosirea comenzii session_start este metoda recomandata).
O sesiune se intinde pe mai multe requesturi (pe parcursul a mai multor accesari ale diferitelor pagini), iar pentru a identifica existenta unei sesiuni PHP poate folosi cookie-uri sau parametrii GET un URL-ul paginii.
Mecanismul de functionare a sesiunilor in PHP 0
In momentul in care un script apeleaza functia session_start pentru prima data intr-o sesiune de lucru, se transmite un cookie catre browserul clientului (un header de tipul 'Set-Cookie', vezi lectia Cookie-uri). Fiind vorba de un cookie, este necesar ca functia session_start sa fie apelata inaintea oricarei instructiuni ce afiseaza ceva (print, echo, etc) si inaintea oricarui cod HTML. Cookie-ul transmis contine un identificator ce poarta numele de Session ID, pe baza caruia se poate face distinctie intre sesiunea curenta si alte sesiuni ale altor utilizatori ce acceseaza site-ul in acel moment.
In cazul in care browserul utilizatorului nu accepta cookie-uri, identificatorul de sesiune va fi transmis printr-un parametru GET, in forma script.php?PHPSESSID=[session id] (se va face practic un redirect automat la aceeasi pagina avand specificat parametrul in URL). Este apoi responsabilitatea programatorului sa includa manual acest identificator in toate celelalte link-uri de pe pagina, asigurandu-se ca toate paginile vor fi accesate cu acest parametru. Aceste situatii sunt insa rare, iar in exemplele ce urmeaza vom considera ca browserele au mereu cookie-urile activate, astfel ca nu va trebui sa avem grija sa transmitem manual Session ID-ul.
In momentul in care se acceseaza din nou aceeasi pagina, sau o alta din cadrul aceluiasi site, identificatorul de sesiune este transmis de catre browser (ca orice cookie existent in browser). Astfel, orice script PHP are acces la Session ID-ul creat initial, fiind capabil sa acceseze sesiunea corecta. Mai este nevoie de ceva insa: pentru a putea avea acces la informatiile persistate, un script trebuie sa apeleze session_start. De aceasta data, existand deja un Session ID disponibil, PHP va sti ca nu trebuie creata o sesiune noua ci continuata una existenta. Asadar, session_start are doua functionalitati: sa porneasca o sesiune noua (atunci cand nu exista un Session ID) sau sa continue o sesiune existenta, identificata printr-un Session ID.
Functiile principale de manipulare a sesiunii sunt prezentate mai jos. Exista o functie care returneaza Session ID-ul curent: session_id. Aceasta este utila cand este nevoie ca identificatorul sa fie transmis in URL. Alternativ se poate folosi constanta globala SID. De asemenea exista o functie pe permite inchiderea unei sesiuni pe parcursul executiei scriptului curent. Inchiderea sesiunii inseamna oprirea posibilitatii de a scrie/citi date, nu stergerea datelor salvate deja. Datele raman salvate si pot fi accesate din nou dupa apelarea functiei session_start.
Accesarea datelor
Din momentul in care scriptul PHP apeleaza session_start, acesta poate incepe deja sa stocheze date ce vor fi persistate. In limbajul programatorilor de PHP se foloseste expresia "sa pastreze date in sesiune" sau "pe sesiune". Aceste date sunt gestionate de catre limbajul PHP (salvate, preluate, etc) si nu este esential pentru programator sa cunoasca mecanismul intern de manipulare a acestora. Poate deveni important, totusi, atunci cand se doreste definirea unui mecanism particularizat de gestionare a sesiunii, dar aceasta reprezinta o facilitate avansata a limbajului PHP care depaseste nivelul acestor lectii.
Salvarea datelor pe sesiune se face prin intermediul vectorului super-global $_SESSION. Exista si o functie ce permite inregistrarea datelor pe sesiune (nu si modificarea lor), dar folosirea acesteia nu este recomandata. Functia se numeste session_register si a fost marcata ca invechita in versiunea 5.3 a limbajului PHP. Citirea datelor persistate se poate realiza tot prin intermediul $_SESSION.
Scrierea si citirea datelor de sesiune se realizeaza practic la fel ca manipularea unui vector asociativ, ceea ce face aceasta functionalitate usor de folosit.
Aplicatie: sa se transmita o informatie de la o pagina la alta folosind sesiunile PHP 4
Urmand exemplul de la inceputul paginii, sa construim cele doua fisiere a.php si b.php pentru a putea pastra textul de la o accesare la alta.
In primul fisier stochez date pe sesiune, urmand ca acestea sa fie citite de pe sesiune in al doilea fisier.
Mergeti la pagina urmatoare';
?>
Dupa accesarea paginii a.php ar trebui sa existe deja o sesiune creata ce are stocata variabila text. Scriptul din b.php va accesa aceasta sesiune, tot prin session_start si va citi datele inregistrate anterior.
f util si la obiect !
Ai uitat numele siteului. Trebuie pus dupa "session_start()" in b.php
Ar trebui de adaugat in b.php un (;) de incheiere a instructiunei session_start() astfel b.php va arata:
<?php
// b.php
session_start(); // continuam o sesiune existenta
echo $_SESSION[ 'text' ]; // afisam informatia
?>
Corect, asa este. Am corectat exemplul. Multumesc!
Adauga un comentariu la aceasta sectiune.
kjkjlkjl
Adauga un comentariu la aceasta sectiune.