Sunteți pe pagina 1din 56

Universitatea Constantin Brncui din Trgu-Jiu

TEHNOLOGII WEB
Lect.dr. Adrian Runceanu

copyright@www.adrian.runceanu.ro

Curs 11

PHP
(Php: Hypertext Preprocessor)
(partea V)

18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Alte elemente n PHP


1. Upload de fiiere utilizand PHP
2. Variabile cookie
3. Programare grafic n PHP
4. Sesiuni n PHP

18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


Prin aciunea de upload, utilizatorul poate ncrca, prin
intermediul unei pagini web, un ntreg fiier (indiferent
c este un fiier binar sau un fiier text) pe server-ul pe
care este stocat i pagina respectiv.
Protocolul de transfer de fiiere ntre dou calculatoare
care sunt legate ntre ele - FTP (File Transfer Protocol),
care dei este o metod eficient de transfer, este greoi
de folosit de un utilizator nespecializat (necesit
specificarea adresei calculatorului la care ne conectm,
un nume de utilizator i o parol, precum i un
program specializat).
18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


Cea mai frecvent aciune de upload din partea unui
utilizator obinuit este ntlnit la ataarea unui fiier
la un e-mail.

Care este principiul de funcionare ?

18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


n primul rnd, trebuie conceput un formular special, n
care se vor insera unul sau mai multe elemente de tip
<input type=file...>
Acestea se prezint sub forma unor textbox-uri n
dreapta crora este prezent un buton Browse, ca n
figura.

Un click fie n interiorul textbox-ului, fie pe butonul


Browse va permite alegerea unui fiier de pe disc
pentru a fi ncrcat.
18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


n etapa urmtoare, dup ce utilizatorul apas, tot n
acel form, butonul de postare date, fiierul ales pentru
upload va fi trimis ctre server, tot prin intermediul unui
script (cel specificat n cadrul atributului action=... al
formularului) i copiat ntr-o locaie temporar.
Activitatea programatorului PHP este ca el s copieze
fiierul la locaia sa definitiv.
Nota: Pentru ca upload-ul s funcioneze, att directorul
temporar n care este ncrcat fiierul, ct i directorul n
care vom muta acest fiier trebuie s aib drepturi de
scriere pentru orice utilizator de pe Internet.
18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


n cadrul script-ului PHP care se ocup de
preluarea fiierului ncrcat, ne vom folosi de un
tablou predefinit al limbajului, i anume $_FILES

Acest tablou asociativ care ne va furniza date


despre fiierul ncrcat, i anume (primul
parametru al lui $_FILES este dat de numele inputului de type=file):
1. Numele complet al fisierului
2. Tipul fisierului
3. Dimensiunea fisierului
18.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


1. $_FILES[nume_input][name]
- returneaz numele i extensia fiierului pe care l-am
upload-at;

2. $_FILES[nume_input][tmp_name]
- returneaz numele complet (cu tot cu calea) fiierului
temporar care s-a creat n urma upload-ului.
- Atenie! acest nume poate s fie complet diferit fa
de cel original.

19.04.2016

Tehnologii WEB - curs

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


3. $_FILES[nume_input][type]
returneaz tipul mime al fiierului (un string, de
exemplu: application/octet-stream sau image/gif.
Valoarea sa nu poate fi garantat ca fiind corect;
4. $_FILES[nume_input][size]
returneaz dimensiunea (n octei) a fiierului upload-at
5. $_FILES[nume_input][error]
returneaz codul de eroare al operaiei de upload
asupra fiierului dat de nume_input.
- Dac operaia s-a ncheiat cu succes, are valoarea 0.
18.04.2016

Tehnologii WEB - curs

10

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


Exemplu:
Urmtoarele fiiere realizeaz o aplicaie prin care
putem upload-a un fiier n acelai director n care se
afl i sursele aplicaiei.
1. Primul fiier reprezint un HTML obinuit, ce conine
doar form-ul prin care se poate face upload-ul fiierului
2. Al doilea fiier reprezint script-ul PHP care preia
fiierul upload-at i l mut n directorul curent
18.04.2016

Tehnologii WEB - curs

11

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


<form enctype="multipart/form-data" action="upload.php"
method="post">
<!-- este obligatoriu sa specificati atributul enctype="multipart/form-data", in caz
contrar nu va fi permisa upload-area de fisiere. Atributul action, specifica numele scriptului care se va ocupa de preluarea fisierului upload-at -->

<input type="hidden" name="MAX_FILE_SIZE" value="30000">


<!-- acest control de tip hidden permite stabilirea unei limite maxime a dimensiunii
fisierului care urmeaza a fi upload-at. -->

Alege un fisier pentru upload (sa aiba sub 30000 bytes):<br/>


<!-- cu ajutorul acestui input type=file putem defini cmpul de tip upload din form -->

<input type="file" name="fisier_incarcat"><br/><br/>


<!-- de valoarea atributului sau name, in cazul nostru fisier_incarcat ne vom folosi
pentru a-l manipula din cadrul codului PHP in care se preia, in fisierul upload.php -->

<input type="submit" value="Incarca fisierul">


</form>
18.04.2016
Tehnologii WEB - curs

12

copyright@www.adrian.runceanu.ro

Upload de fiiere utilizand PHP


Fisierul upload.php
<?php
if($_FILES['fisier_incarcat']['error']!=0) echo 'Upload
nereusit, a aparut o eroare';
else {
move_uploaded_file($_FILES['fisier_incarcat']['tmp_name']
, $_FILES['fisier_incarcat']['name']);
/ * cu ajutorul functiei move_uploaded_file se muta fisierul de la locatia sa
temporara la locatia sa definitiva, care n acest caz este directorul curent.
Parametrii acestei funcii sunt sursa, respectiv destinatia */

echo 'Fisierul a fost incarcat<br>';


echo 'Dimensiunea sa este de
',$_FILES['fisier_incarcat']['size'],' octeti';
}
?>
18.04.2016

Tehnologii WEB - curs

13

copyright@www.adrian.runceanu.ro

Alte elemente n PHP


1. Upload de fiiere utilizand PHP
2. Variabile cookie
3. Programare grafic n PHP
4. Sesiuni n PHP

18.04.2016

Tehnologii WEB - curs

14

copyright@www.adrian.runceanu.ro

Variabile cookie
Utilizarea lor a pornit din necesitatea pstrrii
anumitor setri (opiuni) ale utilizatorului atunci cnd
acesta intr pe un anumit site, pentru a nu mai fi
nevoit sa le specifice la fiecare intrare.
Mecanismul care st la baza acestei probleme se
bazeaz pe memorarea, pe calculatorul vizitatorului
unui anumit site, a unor informaii sub forma unor
mici fiiere text.
Operaia poate fi comandat de pe server i tot de pe
server se poate comanda citirea, actualizarea sau
tergerea acestor mici fiiere text, numite uzual, prin
abuz de limbaj, variabile cookie.
18.04.2016

Tehnologii WEB - curs

15

copyright@www.adrian.runceanu.ro

Variabile cookie
n PHP se poate lucra foarte uor cu variabilele cookie.
1. Pentru a crea o variabil cookie se utilizeaz funcia:

setcookie(nume_variabil, valoare, dat_expirare);


Exemplu: n instruciunea de mai jos este creat o variabil
cookie numit limba_pref.
Variabila reine valoarea romana i expir ntr-o or:
setcookie(limba_pref, romana, time()+3600);
18.04.2016

Tehnologii WEB - curs

16

copyright@www.adrian.runceanu.ro

Variabile cookie
Observaii !
1) Nu pot exista mai mult de 20 de variabile cookie.
Dac se creeaz vreuna n plus, prima creat este tears
automat;
2) Pentru a terge o variabil cookie se creeaz o alta cu
acelai nume, dar cu data de expirare naintea celei
curente (de exemplu, time()-1).

18.04.2016

Tehnologii WEB - curs

17

copyright@www.adrian.runceanu.ro

Variabile cookie
2. Pentru a citi (recupera) valoarea unei variabile cookie,
se utilizeaz coninutul unui tablou asociativ special,
predefinit, al limbajului PHP, numit
$HTTP_COOKIE_VARS[..]
Fiecare component a sa are ca indice numele unei
variabile cookie, iar ca valoare, reine valoarea
variabilei respective.
Exemplu: instruciunea de mai sus afieaz valoarea
variabilei cookie creat prin exemplul anterior:
echo $HTTP_COOKIE_VARS[limba_pref]; //afieaz
romana
18.04.2016

Tehnologii WEB - curs

18

copyright@www.adrian.runceanu.ro

Variabile cookie
Exemplu:
Script-ul care urmeaz exemplific modul n care se pot
reine anumite informaii pe care utilizatorul le-a tastat
o dat.
Apelat pentru prima dat, atunci cnd nu exist
variabila cookie numit loc, se cere tastarea localitii
n care se afl cel care viziteaz pagina.
Dac acel vizitator reintr pe acel site, reapelnd scriptul, acesta va identifica variabila cookie loc, va prelua
direct localitatea memorat i, n loc ca utilizatorului s i
se cear din nou introducerea acesteia, i se va afia
direct un mesaj
18.04.2016

Tehnologii WEB - curs

19

copyright@www.adrian.runceanu.ro

Variabile cookie
Fiier cookie.php
<?php
$loc=@$_POST['loc']; /* se testeaza mai nti dac s-a primit
informatia dintr-un form postat tot din cadrul acestei pagini, o
variabila numita loc, cu valoarea careia trebuie sa cream variabila
cookie */
if($loc!=NULL) // daca s-a primit
setcookie("loc",$loc,time()+24*3600); /* atunci se
seteaza variabila cookie cu valoarea primita, pentru o durata de 24
de ore */
else // daca nu s-a primit, se verifica daca variabila cookie
este deja creata
$loc=@$HTTP_COOKIE_VARS['loc'];
18.04.2016

Tehnologii WEB - curs

20

copyright@www.adrian.runceanu.ro

Variabile cookie
if($loc!=NULL) // deci daca este creata
{
echo "Localitatea curenta este: ",$loc;
// apoi se poate schimba aceasta localitate, daca se doreste

echo '<form action="cookie.php" method="post">';


echo '<p align="right">';
echo 'Schimba localitatea:';
echo '<input type="text" name="loc"><br>';
echo '<input type="submit" value="Schimba
localitatea"> </p></form>';
}
18.04.2016

Tehnologii WEB - curs

21

copyright@www.adrian.runceanu.ro

Variabile cookie
else // in caz contrar, se creaza formularul care permite
introducerea localitatii

{
echo '<form action="cookie.php" method="post">';
echo 'Introdu localitatea<br><br>';
echo '<input type="text" name="loc"><br><br>';
echo '<input type="submit"
value="Salveaza"></form>';
}
?>

18.04.2016

Tehnologii WEB - curs

22

copyright@www.adrian.runceanu.ro

Alte elemente n PHP


1. Upload de fiiere utilizand PHP
2. Variabile cookie
3. Programare grafic n PHP
4. Sesiuni n PHP

18.04.2016

Tehnologii WEB - curs

23

copyright@www.adrian.runceanu.ro

PHP - GD Library
Functiile din biblioteca grafica GD (Graphics Draw)
sunt folosite pentru crearea imaginilor.
Verificati folosind phpinfo(), daca serverul de gazduire
suporta aceste functii, inainte de a le utiliza.
Limbajul PHP nu este limitat doar la crearea de output
HTML, ci poate fi folosit i pentru a crea respectiv a
lucra cu diferite formate de imagini, incluznd gif, png,
jpg.
18.04.2016

Tehnologii WEB - curs

24

copyright@www.adrian.runceanu.ro

PHP - GD Library
Limbajul PHP poate genera o imagine sub forma unui
flux de date (deci fr a o nregistra efectiv sub forma
unui fiier pe server) direct ctre browser.
Pentru a face funcional suportul grafic al limbajului,
este necesar utilizarea bibliotecii gd2.
n cazul pachetului XAMPP, aceasta este instalat i
activat n mod implicit. n cazul altor distribuii, acest
lucru trebuie fcut manual.
18.04.2016

Tehnologii WEB - curs

25

copyright@www.adrian.runceanu.ro

PHP - GD Library
Pentru a insera in paginile web o imagine creata cu functiile din
PHP folositi eticheta img
<img src="imagine.php" alt="Imagine creata cu GD Library">

In urmatorul exemplu vom genera o imagine in format JPEG, cu


dimensiunile 200px x 100px, fond verde.
<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
ImageJPEG ($img, '', 100);
?>
18.04.2016

Tehnologii WEB - curs

26

copyright@www.adrian.runceanu.ro

PHP programare grafica


Iat cteva dintre cele mai importante funcii care lucreaz cu
imagini:
1. header(string) - are ca efect trimiterea unui header HTTP.
n acest caz, al lucrului cu imagini, ne intereseaz s trimitem
browser-ului informaii despre mime-type-ul imaginii create.
Astfel, valorile pe care le putem da string-ului, n funcie de tipul
imaginii pe care o crem, pot fi:
Content-type: image/png pentru imaginile de tip png
Content-type: image/jpeg pentru imaginile de tip jpg
Content-type: image/gif pentru imaginile de tip gif

Este foarte important (n caz contrar se vor genera erori) ca


aceast funcie s fie apelat nainte de trimiterea oricrui alt
output
din cadrul script-uluiTehnologii
n care
apare;
18.04.2016
WEB - curs

27

copyright@www.adrian.runceanu.ro

PHP programare grafica


2. imagecreatetruecolor(lime, nlime) - creeaz o resurs de
tip imagine, pe 32 de bii (truecolor) avnd limea, respectiv
nlimea specificat.
Rezultatul ntors de aceast funcie trebuie obligatoriu atribuit unei
variabile, prin intermediul creia se acceseaza n continuare
imaginea.
Imaginea este de fapt o matrice de pixeli.
Orice punct din imagine se va putea referi prin coordonatele sale
carteziene (x, y).
Originea sistemului de coordonate se gsete n coul stnga-sus al
imaginii (0,0) iar axa Oy este ndreptat n jos.
Valorile posibile pentru x i y sunt numere ntregi, cuprinse n
intervalul
0..lime-1, respectiv
0..nlime-1
18.04.2016
Tehnologii WEB - curs
28

copyright@www.adrian.runceanu.ro

PHP programare grafica


De exemplu, iat o reprezentare schematic a imaginii definite prin:
$imagine=imagecreatetruecolor(400, 300);

Exemplu de imagine cu puncte de coordonate (200,150) respectiv


(300,75).
18.04.2016

Tehnologii WEB - curs

29

copyright@www.adrian.runceanu.ro

PHP programare grafica


3. imagecolorallocate(resurs_imagine, rou, verde, albastru) creeaz o resurs de tip culoare, asociat imaginii specificat prin
resursa din primul parametru.
Rezultatul ntors de aceast funcie trebuie atribuit unei variabile,
prin intermediul creia vom accesa n continuare culoarea definit;

4. imagesetthickness(resursa_imagine, thickness) - stabilete


grosimea liniilor la thickness pixeli, atunci cnd se deseneaz linii,
dreptunghiuri, poligoane;

18.04.2016

Tehnologii WEB - curs

30

copyright@www.adrian.runceanu.ro

PHP programare grafica


5. imageline(resurs_imagine,x0,y0,x1,y1,resurs_culoare) deseneaz un segment de dreapt, de culoarea specificat de
resurs_culoare, n imaginea specificat de resurs_imagine, ntre
punctele de coordonate (x0,y0) i (x1,y1);

6. imagedashedline(resurs_imagine,x0,y0,x1,y1,resurs_culoare)
- la fel ca imageline, doar c segmentul de dreapt desenat este
punctat.
Pentru ca segmentul punctat s fie vizibil, trebuie ca
imagesetthickness s seteze grosimea liniei la cel puin 2 pixeli;

18.04.2016

Tehnologii WEB - curs

31

copyright@www.adrian.runceanu.ro

PHP programare grafica


7.
imageellipse(resurs_imagine,x0,y0,diam_x,diam_y,resurs_culo
are) - deseneaz o elips cu axe paralele cu axele de coordonate,
avnd centrul n punctul de coordonate (x0,y0) i diametrul
orizontal dat de diam_x respectiv cel vertical dat de diam_y;

8. imagerectangle(resursa_imagine, x0, y0, x1, y1,


resurs_culoare ) deseneaz un dreptunghi avnd colurile
diagonal opuse n punctele de coordonate (x0,y0) respectiv
(x1,y1), cu culoarea dat de resursa resursa_culoare;

18.04.2016

Tehnologii WEB - curs

32

copyright@www.adrian.runceanu.ro

PHP programare grafica


9. imagefilledrectangle(res_imag,x0,y0,x1,y1, resurs_culoare)
deseneaz un dreptunghi plin, cu colurile diagonal opuse n
punctele de coordonate (x0,y0) respectiv (x1,y1), de culoarea
dat de resursa resursa_culoare;
10. imagefilledellipse(res_imag,x0,y0,diam_x,diam_y,
resurs_culoare) - la fel ca imageellipse, doar c elipsa desenat
este plin, avnd culoarea dat de resurs_culoare;

18.04.2016

Tehnologii WEB - curs

33

copyright@www.adrian.runceanu.ro

PHP programare grafica


11. imagechar(resursa_imagine,font,x0,y0,caracter,
resurs_culoare) afieaz n imagine caracterul caracter,
ncepnd de la coordonatele (x0,y0) n dreapta i n jos, avnd
culoarea dat de resurs_culoare.
Font poate fi unul dintre font-urile predefinite 1, 2, 3, 4, 5, sau orice
resurs de tip font ncrcat prin imageloadfont();
12. imagestring(resursa_imagine,font,x0,y0,string,
resurs_culoare) afieaz n imagine string-ul string, ncepnd de
la coordonatele (x0,y0) n dreapta i n jos, avnd culoarea dat de
resurs_culoare.
Font poate fi unul dintre font-urile predefinite 1, 2, 3, 4, 5, sau orice
resurs de tip font ncrcat prin imageloadfont();
18.04.2016

Tehnologii WEB - curs

34

copyright@www.adrian.runceanu.ro

PHP programare grafica


Adaugam in exemplul anterior textul "Proba text", cu caractere
albe.
<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$text = ImageColorAllocate ($img,255,255,255);
ImageString ($img,5,10,10,"Proba text",$text);
ImageJPEG ($img, '', 100);
?>

18.04.2016

Tehnologii WEB - curs

35

copyright@www.adrian.runceanu.ro

PHP programare grafica


Crearea unei linii din punctul (10,90) in punctul (190,90). Referinta
coordonatelor este coltul stanga sus.
<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageLine ($img,10,90,190,90,$col);
ImageJPEG ($img, '', 100);
?>

18.04.2016

Tehnologii WEB - curs

36

copyright@www.adrian.runceanu.ro

PHP programare grafica


Completam exemplul anterior cu inca 2 linii pentru a desena un
triunghi.
<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageLine ($img,10,90,190,90,$col);
ImageLine ($img,10,90,100,10,$col);
ImageLine ($img,100,10,190,90,$col);
ImageJPEG ($img, '', 100);
?>
18.04.2016

Tehnologii WEB - curs

37

copyright@www.adrian.runceanu.ro

PHP programare grafica


Crearea unei elipse in centrul imaginii (100,50), avand latimea 180
si inaltimea 80.
<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImageEllipse ($img,100,50,180,80,$col);
ImageJPEG ($img, '', 100);
?>

18.04.2016

Tehnologii WEB - curs

38

copyright@www.adrian.runceanu.ro

PHP programare grafica


Crearea unui trapez.
<?php
header ("Content-type: image/jpeg");
$img = ImageCreate (200,100);
$fond = ImageColorAllocate ($img,0,200,0);
$col = ImageColorAllocate ($img,255,255,255);
ImagePolygon ($img,array(60,10,140,10,190,90,10,90),4,$col);
ImageJPEG ($img, '', 100);
?>

18.04.2016

Tehnologii WEB - curs

39

copyright@www.adrian.runceanu.ro

Alte elemente n PHP


1. Upload de fiiere utilizand PHP
2. Variabile cookie
3. Programare grafic n PHP
4. Sesiuni n PHP

18.04.2016

Tehnologii WEB - curs

40

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
Sesiunile, reprezinta o functionalitate prin
care anumite informatii sunt mentinute de la o
pagina la alta.
O sesiune dureaza att timp ct utilizatorul
acceseaza un site si se ncheie odata cu
nchiderea browser-ului.

18.04.2016

Tehnologii WEB - curs

41

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
1. Request-uri stateless i 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 ntmpl si atunci cnd sunt accesate mai
multe pagini diferite una dupa alta.
18.04.2016

Tehnologii WEB - curs

42

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
Spre exemplu, daca un utilizator acceseaza pagina a.php
i apoi b.php, codul PHP din a doua pagina (b.php) nu
poate sti ce s-a intmplat n a.php.

Exemplu:
n a.php se defineste o variabila ca mai jos:
$text = 'Mesaj din prima pagina';
n b.php exista o bucata de cod care afiseaza variabila
$text:
echo $text;
18.04.2016

Tehnologii WEB - curs

43

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
Datorita naturii stateless a request-urilor pagina
b.php nu va afisa nimic, intruct variabilele si toate
operatiunile executate in pagina a.php nu se
pastreaza de la o cerinta la alta.
n 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 cnd
executia scriptului din a.php se termina.

18.04.2016

Tehnologii WEB - curs

44

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
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 cteva moduri prin care mici
cantitati de date pot fi transmise catre o alta pagina
spre exemplu, prin formulare, 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).
18.04.2016

Tehnologii WEB - curs

45

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
2. Sesiuni n PHP

n 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 cnd un script apeleaza funcia
session_start() si se termina atunci cnd utilizatorul inchide
browser-ul.
O sesiune se intinde pe mai multe request-uri (pe parcursul a
mai multor accesari ale diferitelor pagini), iar pentru a
identifica existenta unei sesiuni PHP poate folosi cookie-uri sau
parametrii GET n URL-ul paginii.

18.04.2016

Tehnologii WEB - curs

46

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
3. Mecanismul de funcionare a sesiunilor n PHP
n momentul n care un script apeleaza funcia session_start()
pentru prima data ntr-o sesiune de lucru, se transmite un
cookie catre browser-ul clientului (un header de tipul SetCookie).
Fiind vorba de un cookie, este necesar ca funcia
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.
18.04.2016

Tehnologii WEB - curs

47

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
n cazul in care browser-ul 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 avnd specificat
parametrul n URL).
Este apoi responsabilitatea programatorului sa includa manual
acest identificator in toate celelalte link-uri de pe pagina,
asigurndu-se ca toate paginile vor fi accesate cu acest
parametru.
Aceste situatii sunt insa rare, iar in exemplele ce urmeaza vom
considera ca browser-ele au mereu cookie-urile activate, astfel
ca nu va trebui sa avem grija sa transmitem manual Session IDul.
18.04.2016
Tehnologii WEB - curs
48

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
n momentul n 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, existnd 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 cnd nu exista un Session ID) sau sa
continue o sesiune existenta, identificata printr-un Session ID.
18.04.2016

Tehnologii WEB - curs

49

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
Exista o funcie care returneaza Session ID-ul curent: session_id().
Aceasta este utila cnd este nevoie ca identificatorul sa fie
transmis in URL. Alternativ se poate folosi constanta globala SID.

De asemenea exista o funcie pe permite inchiderea unei sesiuni


pe parcursul executiei scriptului curent.
nchiderea sesiunii inseamna oprirea posibilitatii de a scrie/citi
date, nu stergerea datelor salvate deja.
Datele ramn salvate si pot fi accesate din nou dupa apelarea
funciei session_start().
18.04.2016

Tehnologii WEB - curs

50

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
<?php
session_start();
echo session_id();
echo SID; // are acelasi efect ca instructiunea anterioara
session_write_close(); // permite inchiderea sesiunii in
script-ul curent

?>

18.04.2016

Tehnologii WEB - curs

51

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
4. Accesarea datelor
Din momentul in care scriptul PHP apeleaza session_start(),
acesta poate incepe deja sa stocheze date ce vor fi persistate.
n 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.
Salvarea datelor pe sesiune se face prin intermediul vectorului
superglobal $_SESSION.
Exista si o funcie ce permite inregistrarea datelor pe sesiune (nu
si modificarea lor), dar folosirea acesteia nu este recomandata.
Funcia se numeste session_register() si a fost marcata ca
invechita in versiunea 5.3 a limbajului PHP.
18.04.2016

Tehnologii WEB - curs

52

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
Citirea datelor persistente se poate realiza tot prin intermediul
$_SESSION:
<?php
session_start();
// inregistrarea datelor in sesiune
$_SESSION['text'] = 'Mesaj persistat';
// citirea din sesiune
echo $_SESSION['text'];

18.04.2016

Tehnologii WEB - curs

53

copyright@www.adrian.runceanu.ro

Sesiuni in PHP
// pe sesiune se pot inregistra aproape orice tipuri de date
$vector = array('a', 'b', 'c');
$_SESSION['litere'] = $vector;
// accesez o parte din vectorul stocat
echo $_SESSION['litere'][0]; // afiseaza a
echo $_SESSION['litere'][2]; // afiseaza c
?>

Scrierea si citirea datelor de sesiune se realizeaza practic la fel ca


manipularea unui vector asociativ, ceea ce face aceasta
functionalitate usor de folosit.

18.04.2016

Tehnologii WEB - curs

54

copyright@www.adrian.runceanu.ro

Bibliografie:
1. Adrian Runceanu, Mihaela Runceanu, Tehnologii si
aplicatii web ndrumar de laborator, Editura
Academica Brncui, Trgu-Jiu, 2009, ISBN 978-973144-302-7
2. http://php.net/manual/en/book.image.php

ntrebri?
18.04.2016

Tehnologii WEB - curs

55

copyright@www.adrian.runceanu.ro

Studiu individual:
http://php.punctsivirgula.ro/
http://www.w3schools.com/php/
http://www.tizag.com/phpT/examples/formex.p
hp
https://www.codingunit.com/category/phptutorials

18.04.2016

Tehnologii WEB - curs

56

S-ar putea să vă placă și