Transcript ppt - ULBS
Lucrul cu “sesiuni” in PHP
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:
26fe536a534d3c7cde4297abb45e275a
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 sau $_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ț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=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 ...
Cookie (biscuit)
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....