280 likes | 419 Views
Lucrul cu “sesiuni” in PHP. Modalități. Cum lucrează o sesiune ?. Fiecare utilizator primeste un identificator unic un s ession id . Ex: 26fe536a534d3c7cde4297abb45e275a. Cum lucrează o sesiune ?.
E N D
Cum lucrează o sesiune? • Fiecare utilizator primeste un identificator unic • un session id. Ex: 26fe536a534d3c7cde4297abb45e275a
Cum lucrează o sesiune? • Acestsession ideste salvat într-un cookie sau trimis prin intermediul URL paginilor pe care userul le vizualizează. • Datele care se salvează (exuser, id, stare, etc.) is sunt stocate pe server într-o varoabilă PHP superglobală
Pornirea unei sesiuni session_start(); PHP caută un sesion id valid în variabilele superglobale $_COOKIEsau$_GET Dacă nu găseste un nou session id este creat
Pornirea unei sesiuni session_start(); Funcția trebuie apelată prima....
Salvarea variabilelor de sesiune • Variabila superglobală$_SESSION(array asociativ) se va utiliza pentru a memora valori EX. $_SESSION[‘id’] = $id; $_SESSION[‘logat’] = $log;
Citirea valorilor • Valorile se citesc din vectorul asociativ $_SESSION EX. $id =$_SESSION[‘id’]; $log = $_SESSION[‘logat’]
Propagarea sesiunii • Id sesion trebuie să se propage în paginile pe care le vizitează utilizatorul • Se face în două moduriIt can do this in two ways: • Prin Cookie • Prin URL
Propagarea cu ajutorul cookie-ului • Pe mașina utilizatorului se salvaeză în temporary internet folder un cookie care conține id-ul sesiunii (session id) • Se citeste de fiecare dată când se apelează funcțiasession_start();pentru inițializarea sesiunii. • Comportare standard: cookie-ul expiră când se închide browserul. Proprietățile coockie-ului pot fi modificate cu session_set_cookie_params
Propagarea prin URL • Sesiunea (nr. ei) se trimite prin intermediul URL-ului (…baburiba/index.php?sid=26fe536a534d3c7cde4297abb45e275a) • PHP oferă o constantă globală pentru a trimite către orice link intern id-ul sesiunii:SID. Ex. <a href=“baburiba.php?<?=SID?>">Pagina baburib</a>
Pe care s-o alegem..? • În cazul instalării default a PHP pe server se utilizează ambele metode. • se verifică mai întâi dacă userul are cookies enabled. • dacă sunt pe on atunci PHP utilizează pentru propagare cookie-urile. Altfel utilizează propagarea prin URL
Distrugerea unei sesiuni De obicei nu e nevoie dar dacă vrem: // stergbem variabilele de sesiune $_SESSION = array(); // stergem cookie-ul care s-a folosit în salvarea sesiunii if (isset($_COOKIE[session_name()])) { setcookie(session_name(),'',time()-42000,'/'); } // distrugem sesiunea session_destroy(); // evitam reutilizare SID prin redirectarea // catre pagina care a generat sesiunea header('Location: '.$_SERVER['PHP_SELF']);
Expirarea unei sesiuni • Default: sesiuni PHP expiră: • După o anumită perioadă de inactiviate (default 1440s), procesul de colectare a gunoiuluio propriu PHP-ului șerge variabilele de sesiune • Dacă s-a propagat prin cookie atunci se setează un cookie care se distruge când se închide browserul. • Dacă s-a propagat prin URL atunci session id se pierde când se părăseste situl.
Session Hi-jacking • O problemă de securitate:dacă un utilizator rău reușește să obțină o sesiune activă care nu e a lui... Ex. • user 1 navighează cu cookies disabled (propagare prin URL). • user 1 se loghează. • user 1 trimite unui “prieten” un link interesant prin mail. User2 copiază URL si a obținut id-ul sesiunii user1 • user 2 înainte ca id-ul de sesiune să fie distrus fură astfel sesiunea user-ului 1 • user 2 este de acuma logat...!!
… o povață … Dacă vă gândiți la securitate atunci trebuie să vă fie clar că sesiunile propagate prin URL pot fi compromise. Propagarea prin cookie este mai sigură dar ...
Ce este un cookie? • Este un fisier text salvat pe calculatoarul utilizatorului. • Fiecare cookie este specific pentru un anumit domeniu. • Orice cookie foloseste până la 4kB de date. • Pentru un anumit domeniu se pot utiliza până la 20 de cookie-uri.
Cum funcționează? • Pas1: Utilizatorul face o cerere către www.baburiba.ro Cererea paginii
Pas 2: Vine un răspuns de la www.baburiba.ro în format html și totodată se trimite si cookie-ul care conține date xhtml cookie data
Pas 3: La orice cerere a utilizatorului către domeniul www.baburiba.ro se trimite automat si cookie-ul salvat pe calculatorul utilizatorului asociat acestui domeniu. page request cookie data
Setarea unui cookie setcookie(name [,value [,expire [,path [,domain [,secure]]]]]) name = cookie name value = data to store (string) expire = UNIX timestamp when the cookie expires. Default is that cookie expires when browser is closed. path = Path on the server within and below which the cookie is available on. domain = Domain at which the cookie is available for. secure = If cookie should be sent over HTTPS connection only. Default false.
Exemplu setcookie(‘nume’,’Baburiba’) se va seta un cookie numit nume având valoarea Baburiba. Va fi disponibil pentru toate paginile din directorul curent sau subdirectoare ale paginii care l-a setat. Expiră când se va închide browserul.
Exemplu 2 • setcookie(‘nota’,’10’,time()+60*60*24*30) se va seta un cookie numit nota având valoarea 10. Va fi disponibil pentru toate paginile din directorul curent sau subdirectoare ale paginii care l-a setat. Expiră peste 2592000 de secunde
Citirea datelor dintr-un cookie • Toate valorile sunt salvate în variabial superglobală $_COOKIE: $variable = $_COOKIE[‘cookie_name’] sau $variable = $HTTP_COOKIE_VARS[‘cookie_name’]; Ex: $nume = $_COOKIE[‘nume’];
Stergerea unui cookie • Pentru a șterge un cookie se suprascrie acel cookie cu ceva care expiră în trecut .... setcookie(‘cookie_name’,’’,time()-86400) • În principiu orice număr poate fi folosit pentru a se scade din valoarea returnată de time()dar având în vedere că timpul local diferă de pe un calculator pe altul... mai bine scădem o zi sau două
Important • Deoarece setarea unui cookie implică trimiterea header-ului trebuie neapărat să fie scris pe prima linie a codului php corect gresit
To be continued • Să ne uităm la firefox mai atent....