Lucrul cu sesiuni in PHP Modaliti Cookie Spaiu

  • Slides: 28
Download presentation
Lucrul cu “sesiuni” in PHP

Lucrul cu “sesiuni” in PHP

Modalități Cookie Spațiu limitat de date Session Spațiu nelimitat Salvare nesigură la nivel Securitate

Modalități Cookie Spațiu limitat de date Session Spațiu nelimitat Salvare nesigură la nivel Securitate acceptabilă la de client nivel de server Controlabil de către utilizator Utilizatorul nu are control

Cum lucrează o sesiune? Fiecare utilizator primeste un identificator unic un session id. Ex:

Cum lucrează o sesiune? Fiecare utilizator primeste un identificator unic un session id. Ex: 26 fe 536 a 534 d 3 c 7 cde 4297 abb 45 e 275 a

Cum lucrează o sesiune? Acest session id este salvat într-un cookie sau trimis prin

Cum lucrează o sesiune? Acest session id este salvat într-un cookie sau trimis prin intermediul URL paginilor pe care userul le vizualizează. Datele care se salvează (ex user, 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 $_COOKIE

Pornirea unei sesiuni session_start(); PHP caută un sesion id valid în variabilele superglobale $_COOKIE sau $_GET Dacă nu găseste un nou session id este creat

Pornirea unei sesiuni session_start(); Funcția trebuie apelată prima. .

Pornirea unei sesiuni session_start(); Funcția trebuie apelată prima. .

Salvarea variabilelor de sesiune Variabila superglobală $_SESSION (array asociativ) se va utiliza pentru a

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

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ă

Propagarea sesiunii Id sesion trebuie să se propage în paginile pe care le vizitează utilizatorul Se face în două moduri. It can do this in two ways: Prin Cookie Prin URL

Propagarea cu ajutorul cookieului Pe mașina utilizatorului se salvaeză în temporary internet folder un

Propagarea cu ajutorul cookieului 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ția session_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=26

Propagarea prin URL Sesiunea (nr. ei) se trimite prin intermediul URL-ului (…baburiba/index. php? sid=26 fe 536 a 534 d 3 c 7 cde 4297 abb 45 e 275 a) 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

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

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

Expirarea unei sesiuni Default: sesiuni PHP expiră: După o anumită perioadă de inactiviate (default 1440 s), 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

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. User 2 copiază URL si a obținut id-ul sesiunii user 1 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

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

Cookie (biscuit)

Cookie (biscuit)

Ce este un cookie? Este un fisier text salvat pe calculatoarul utilizatorului. Fiecare cookie

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 4 k. B de date. Pentru un anumit domeniu se pot utiliza până la 20 de cookie-uri.

Cum funcționează? Pas 1: Utilizatorul face o cerere către www. baburiba. ro Cererea paginii

Cum funcționează? Pas 1: 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

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

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]]]]])

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

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

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 =

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

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

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

To be continued Să ne uităm la firefox mai atent. .