Sunteți pe pagina 1din 114

D

r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Tehnologii Web


Programare Web (II)



cookie-uri & sesiuni, servere de aplicatii Web,
arhitectura aplicatiilor Web
detalii in [TX, 269-274] [CGI, 55-58]
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Putin ajutor la timpul potrivit este mai bun
dect mult ajutor la timp nepotrivit.




Teyve
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Exista o maniera prin care se pot stoca
temporar , la nivel de client (browser),
date trimise de aplicatia Web de pe server?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Mecanism standard ce permite ca un server Web
sa plaseze informatii pe calculatorul-client
(la utilizator), prin intermediul browser-ului,
pentru ca, ulterior, navigatorul sa returneze
informatiile acelui server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Mijloc persistent de stocare a datelor pe masina
clientului Web cu scopul de a fi accesate ulterior
de pe server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: utilizari
Memorarea preferintelor fiecarui utilizator



exemplu tipic: tema vizuala
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: utilizari
Completarea automata a formularelor



folosirea valorilor introduse anterior de utilizator
in anumite cimpuri
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: utilizari
Monitorizarea accesului la o resursa Web



aspecte de interes:
Web analytics
user tracking
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: utilizari
Stocarea informatiilor de autentificare



e.g., retinerea datelor privitoare la contul utilizatorului
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: utilizari
Starea tranzactiilor in cadrul unei aplicatii Web



e.g., starea cosului de cumparaturi intr-un e-shop
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: utilizari
Managementul sesiunilor Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: tipuri
Cookie-uri persistente

nu vor fi distruse la inchiderea navigatorului,
ci vor fi memorate intr-un fisier, perioada lor de
viata fiind stabilita de creatorul cookie-urilor
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: tipuri
Cookie-uri nepersistente

dispar la inchiderea browser-ului
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Un cookie poate fi privit ca fiind o variabila
a carei valoare este vehiculata via HTTP
intre server (aplicatia) Web si client (navigator)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Un cookie poate fi privit ca fiind o variabila
a carei valoare este vehiculata via HTTP
intre server (aplicatia) Web si client (navigator)


consta dintr-o pereche nume=valoare

valoarea este un sir de caractere URL-encoded
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Datele referitoare la un cookie vor fi receptionate
de navigator care mentine o lista de cookie-uri
apartinind serverului care le-a trimis
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Un cookie este trimis unui client
folosind campul Set-Cookie
dintr-un antet al unui mesaj de raspuns HTTP
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Set-Cookie: nume=valoare; expires=data; path=cale;
domain=domeniu; secure
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Set-Cookie: nume=valoare; expires=data; path=cale;
domain=domeniu; secure
expires indica data si timpul
cand cookie-ul va expira si clientul il va distruge

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Set-Cookie: nume=valoare; expires=data; path=cale;
domain=domeniu; secure
domain desemneaza numele simbolic al serverului
care a generat cookie-ul
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Set-Cookie: nume=valoare; expires=data; path=cale;
domain=domeniu; secure
path specifica un subset de URL-uri
din domeniul corespunzator unui cookie

diferentiaza aplicatii existente pe acelasi server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Set-Cookie: nume=valoare; expires=data; path=cale;
domain=domeniu; secure
secure indica faptul ca acest cookie va fi transmis
doar in cazul in care canalul de comunicatie este sigur
(via HTTPS)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Un cookie este transmis inapoi de la client
spre serverul Web doar daca intruneste
toate conditiile de validitate


se potrivesc domeniul, calea de directoare,
timpul de expirare si
securitatea canalului de comunicatie
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Serverul va primi de la client,
in antetul HTTP, o linie de forma:

Cookie: nume1=valoare1; nume2=valoare2...


lista cookie-urilor ce respecta conditiile de validitate
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Invocarea script-ului conduce la returnarea
unei reprezentari + setarea de cookie-uri


Server
Web
Client
Web
cerere HTTP
invocare script
rspuns HTTP
Set-Cookie: culoare=verde
Script
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Cookie-urile persistente sau nu sunt memorate
la nivel de browser


Server
Web
Client
Web
culoare=
verde
Script
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri
Urmatorul acces la script se face cu transmiterea
cookie-urilor spre server
conform conditiilor de validitate


Server
Web
Client
Web
cerere HTTP
Cookie: culoare=verde
rspuns HTTP
Script
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: stocare
Stocarea cookie-urilor persistente:
Netscape/Firefox < 3 fisierul cookies sau cookies.txt

domeniu acces cale securitate expirare nume valoare
pinguin.info FALSE / FALSE 966862979 culoare verde
pinguin.info FALSE / FALSE 966782841 alta_culoare gri
.uaic.ro FALSE /doc FALSE 969367226 accesari 3
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: stocare
Stocarea cookie-urilor persistente:
Mozilla Firefox >3 o baza de date SQLite: cookies.sqlite

tabela moz_cookies (id INTEGER PRIMARY KEY,
name TEXT, value TEXT, host TEXT, path TEXT,
expiry INTEGER, lastAccessed INTEGER,
isSecure INTEGER, isHttpOnly INTEGER)

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: stocare
Stocarea cookie-urilor persistente:
Internet Explorer fisiere denumite nume@adresa.txt

sabin@www.elsevier.txt
AnEFromrel_client
www.elsevier.com/
0
3415826816
29364629
4113724112
29364628
*
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: stocare
Stocarea cookie-urilor persistente:
Safari un document Cookies.plist in format XML
<plist>
<array>
<dict> <!-- sir de perechi cheie-valoare -->
<key>Created</key> <real>285860755.23853493</real>
<key>Domain</key> <string>.youtube.com</string>
<key>Expires</key> <date>2012-09-19T13:45:00Z</date>
<key> Name </key> <string>VISITOR_INFO1_LIVE</string>
<key> Path </key> <string>/</string>
<key> Value </key> <string>zoj_Hf4KPN0</string>
</dict>
</array>
</plist>

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: creare
Exemplu pentru CGI, folosind bash:

#!/bin/bash
echo "Set-Cookie: culoare=verde; path=/;
expires=Mon, 07-May-2012 07:33:00 GMT"
...
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: creare
Exemplu in cazul PHP functia setcookie()

<?php
setcookie ("alta_culoare", "albastra");
echo "Un cookie de culoarea " . $_COOKIE["alta_culoare"];
?>
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: expirare
Se anuleaza valoarea si timpul,
eventual resetindu-se si celelalte atribute ale cookie-ului

exemplu pentru PHP:

<?php
setcookie ($nume_cookie, "", 0, "/", "", 0);
?>
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: consultare
Cookie-urile se regasesc in variabila-antet
HTTP_COOKIE
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: consultare
Cookie-urile se regasesc in variabila-antet
HTTP_COOKIE

pentru PHP cookie-ul e specificat (accesat) ca variabila:

$_COOKIE ['nume_cookie']
tablou asociativ
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: consultare
Exemplu pentru CGI script Perl

@cookieuri = split (/;/, $ENV{'HTTP_COOKIE'});
foreach $pereche (@cookieuri) {
($nume, $val) = split (/=/, $pereche);
$cookie{$nume} = $val; # tablou asociativ
}
$fundal = $cookie{'alta_culoare'};

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

cookie-uri: manipulare
Pentru ASP.NET: proprietatea Cookies
a colectiei HttpCookieCollection
(vezi HttpRequest si HttpResponse din System.Web)

HttpCookie vizita = new HttpCookie ("ultima_vizita");
DateTime timp_curent = DateTime.Now;
vizita.Value = timp_curent.ToString ();
vizita.Expires = timp_curent.AddHours (24); // expira peste 1 zi
Response.Cookies.Add (vizita);

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

preliminarii
HTTP este un protocol stateless,
neputand oferi informatii daca anumite cereri
succesive provin de la acelasi client
(eventual, de la aceeasi instanta a navigatorului)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

preliminarii
Apare necesitatea de a prezerva anumite date
de-a lungul mai multor accesari inrudite
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

preliminarii
Apare necesitatea de a prezerva anumite date
de-a lungul mai multor accesari inrudite

exemple:
starea cosului de cumparaturi,
formulare Web completate in mai multi pasi,
paginarea continutului,
starea autentificarii
etc.
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni
Orice vizitator al sitului va avea asociat
un identificator unic session ID (SID)



stocat intr-un cookie ori propagat via URL
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni
Orice vizitator al sitului va avea asociat
un identificator unic session ID (SID)



astfel, se pot identifica vizite (cereri) consecutive
realizate de acelasi utilizator
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni
Unei sesiuni i se pot asocia diverse variabile



ale caror valori vor fi mentinute
intre accesari consecutive
din partea aceleiasi instante de client
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni
O sesiune se poate inregistra (initia)
implicit sau explicit, in functie de serverul
de aplicatii ori de configuratia stabilita
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni
O sesiune se poate inregistra (initia)
implicit sau explicit, in functie de serverul
de aplicatii ori de configuratia stabilita

unele servere de aplicatii garanteaza
integritatea sesiunii si dupa o restartare
(a serverului sau a aplicatiei)

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni: programare
In cazul CGI, managementul sesiunilor
cade in responsabilitatea programatorului



nu exista un mecanism standardizat
referitor la manipularea sesiunilor Web

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni: programare
Pentru PHP: functiile session_start(), session_register(),
session_id(), session_unregister(), session_destroy()

<?php
session_start (); // initiem o sesiune
if (!isset ($_SESSION['accesari'])) {
$_SESSION['accesari'] = 0; } else {
$_SESSION['accesari']++; }
?>
variabila
accesari atasata
sesiunii
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni: programare
Pentru ASP.NET, vezi HttpSession (System.Web)
ofera suport si pentru evenimente privind sesiunile



// preia numele de utilizator stocat in cadrul sesiunii
nume = Session["Nume"].ToString ();
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni: programare
Folosind un cadru de lucru (framework),
managementul cookie-urilor & sesiunilor
poate fi mult simplificat

cateva exemplificari:
Apache::Session (modul Perl), Django (Python),
Struts (Java), Symfony (PHP)


avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

GET / HTTP/1.1
Host: plus.google.com
User-Agent: Mozilla/5.0 (rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: PREF=ID=d7ab9cd8e5e1f17d:U=213749fe7b4fe3ea:;
SID=DQABANMAAAB5eFmWHrrpw203iK4g;
HSID=AlJExygxk_sNdOIAX;
SSID=ATkVPS5BM2xEjGwXZ;
APISID=cXJw6EX3K_WAUyDd/A8wP-XcSkrjWocGEe;
SAPISID=B13Zj7NiRE23qoe4/AlVGLP6D5ckMamKjz;
OTZ=1136908_48_48_123900_44_436380;
SS=DQABANMAAADjUhMKA;
ULS=EgYKBBICZW4YuLGa-gQ
cookie-uri (stocand inclusiv informatii
despre sesiunea curenta) intr-o cerere GET


avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

sesiuni: exemplificare
HTTP/1.1 200 OK
Set-Cookie: SID=DQABANMAAAB5eFmWHrrpw203iK4g;
Domain=.google.com;
Path=/;
Expires=Sat, 26-Feb-2022 13:24:40 GMT
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Date: Wed, 29 Feb 2012 13:24:40 GMT
Expires: Wed, 29 Feb 2012 13:24:40 GMT
Server: GSE

<!DOCTYPE html>


raspunsul HTTP incluzand
setarea cookie-ului privitor la sesiune


avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Exista alternative la CGI
pentru dezvoltarea de aplicatii Web?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Eficientizeaza procesele de dezvoltare
a aplicatiilor Web de anvergura
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Se bazeaza pe interfete de programare
(API Application Programming Interfaces)
si/sau pe componente reutilizabile


puse la dispozitie de server ori de alti ofertanti
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Se integreaza in unul sau mai multe servere Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Pot incuraja sau impune o viziune arhitecturala
privind dezvoltarea de aplicatii Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Pot incuraja sau impune o viziune arhitecturala
privind dezvoltarea de aplicatii Web

modelul de structurare a datelor este separat
de maniera de procesare (controlul aplicatiei) si
de modul de prezentare a acestora (interfata Web)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Pot incuraja sau impune o viziune arhitecturala
privind dezvoltarea de aplicatii Web

modelul de structurare a datelor este separat
de maniera de procesare (controlul aplicatiei) si
de modul de prezentare a acestora (interfata Web)

principiu: separation of concerns
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: mvc
Majoritatea aplicatiilor Web sunt dezvoltate
pe baza MVC (Model-View-Controller)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: mvc
View
(prezentare+interactiune)
Model
(structura datelor)
Controller
(procesare)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: mvc
View
la nivel client(i) Web
Model
stocare persistenta
Controller
aplicatie Web la nivel de server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: mvc
View
la nivel client(i) Web
Model
stocare persistenta
Controller
aplicatie Web la nivel de server

HTML, CSS, SVG, Flash, Silverlight etc.

SQL, NoSQL, XML (XQuery), RDF,

CGI, servere de aplicatii
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Uzual, ofera posibilitatea de a include cod (script)
direct in cadrul documentelor Web,
cod invocat pe server


generarea de continut dinamic pe partea de server
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii
Maniera de includere depinde
de serverul de aplicatii Web:
<% ... %> pentru ASP.NET
<% ... %> pentru JSP (Java Server Pages)
<?php ... ?> pentru PHP
<% ... %> pentru Ruby on Rails

mai general: <script language="...">...</script>
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Limbaj(e) de programare
API-ul de baza
Stocare persistenta a modelelor de date
Interactiune Web
Cookie-uri & sesiuni
Procesari XML
Medii de dezvoltare & cadre de lucru
Caracteristici particulare
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Limbaj(e) de programare

limbajele .NET: in special C#ASP.NET e independent
de limbaj, fiind parte din .NET Framework
Java (AppFuse, Play, Wicket etc.)
PHP (PHP + framework-uri: CakePHP, Symfony,)
Python (Django, Grok, Pyramid, Zope)
Ruby (Ruby on Rails, Sinatra)
altele
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Limbaj(e) de programare

strong typed vs. weak typed (ASP.NET/JSP vs. PHP)

utilizare de spatii de nume si instante de clase

raportare de erori (PHP4) vs. exceptii (ASP.NET, PHP5)

pur obiectuale (ASP.NET, JSP) sau nu (PHP)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Limbaj(e) de programare

pot fi dinamice e.g., Python, Ruby

interpretate sau compilate
uzual, se prefera generarea de cod intermediar:
IL Intermediate Language
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
API-ul de baza

contribuie la puterea limbajului
+ serverului de aplicatii
(via functii/clase predefinite)

securitate, consistenta,
acces la resursele mediului de operare
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
API-ul de baza

poate oferi suport pentru migrarea facila
de la aplicatii clasice la cele Web

poate asigura si independenta de platforma
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
API-ul de baza

functionalitati incluse e.g., PHP built-in functions
versus
ASP.NET CLR (Common Language Runtime) / JSP

functionalitatile incluse in API-ul de baza nu necesita
recompilarea serverului de aplicatii
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru stocare persistenta
in baze de date relationale via SQL

pentru a avea acces sau a modifica date stocate persistent,
aplicatia Web functioneaza ca un client
pentru un server de baze de date
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru stocare persistenta
in baze de date relationale via SQL

exemplu:
functii PHP predefinite pentru o pleiada de RDBMS,
via biblioteci incorporate (SQLite + mysqli in PHP5)
sau diverse extensii
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru stocare persistenta
in baze de date relationale via SQL

se poate recurge la un API pentru accesul la date

ORM (Object-Relational Mapping)

ADO.NET pentru ASP.NET
JDBC (Java DataBase Connectivity) pentru Java (JSP)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru stocare persistenta
in baze de date relationale via SQL

eventual, se va recurge la framework-uri aditionale

e.g., Hibernate Java; NHibernate, LINQ .NET

legarea datelor de program (data binding)
poate fi realizata automat (ASP.NET) sau manual (PHP)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru stocare persistenta
pe baza modelelor arborescente: XML

date (semi)structurate
transformari in alte formate: XPath, XSLT
procesari: DOM, SAX, SimpleXML etc.
validari: DTD, XML Schema, RELAX,
interogari: XQuery
etc.

cursurile
viitoare
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru stocare persistenta
recurgand la alte paradigme non-relationale,
distribuite la nivel de Internet, scalabile NoSQL

http://asserttrue.blogspot.com/2009/12/nosql-required-reading.html
http://nosql-databases.org/

exemplificari:
Cassandra, CouchDB, Hadoop, MongoDB, Terrastore etc.

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru interactiunea Web

interactiunea e facilitata de controale Web specificate
in cadrul codului-sursa rulat pe server

emuleaza campurile din formularele (X)HTML si/sau
ofera controale noi e.g., calendar, slideshow,

generarea de cod HTML (+JavaScript) in functie de client
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru interactiunea Web



exemplificari
ASP.NET (<asp:control>)
framework-ul PRADO (PHP)
similar, pentru platforma Java: e.g., JSF (JavaServer Faces)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru interactiunea Web

procesarea evenimentelor provenind de la client
event driven Web applications

exemplu tipic: ASP.NET clasic
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport pentru interactiunea Web

RIA (Rich Internet Applications)
transfer asincron de date
via suita de tehnologii Ajax


eventual, via framework-uri/module/clase aditionale
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Medii de dezvoltare

comerciale
Visual Studio .NET, Zend,...

versus

educationale, gratuite sau open-source
Aptana, Eclipse, Padre, Visual Web Developer Express
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Medii de dezvoltare

depanatoare (debuggers)

optimizatoare de cod e.g., Zend Optimizer

profilers

si altele
important in
contextul RIA
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Medii de dezvoltare

facilitati pentru dezvoltatorii de servicii Web
SOAP si/sau REST

clase/componente/biblioteci aditionale
comerciale, gratuite (freeware), open-source
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport acordat inginerilor software

aplicatii N-tier

se incurajeaza folosirea sabloanelor de proiectare
(design patterns):
Container, MVC (Model-View-Controller),
Proxy, Configuration Parameters, Invocation Context,

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport acordat inginerilor software

unitati de testare automata cadrul general dat de xUnit
HttpUnit, JUnit, PHPUnit, NUnit, Test::Class for Perl
(la nivel de server)
+
JSUnit, FireUnit, Selenium
(la nivel de client)

de vizitat http://xunitpatterns.com/

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport acordat inginerilor software

generarea automata de documentatii, in diverse formate

suport pentru source control code review, versioning

pot viza si probleme legate de performanta (e.g., caching)

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Suport acordat inginerilor software

incurajarea unui stil de scriere a codului-sursa
si/sau
recurgerea la o metodologie/paradigma
e.g., agile programming

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Alte caracteristici

descrierea atributelor unei pagini/sit
(limbaj, sesiuni, tratare de evenimente, continut,...)

maniera de autentificare suport pentru sesiuni

tema vizuala (skin)

sabloane de vizualizare (template-uri) etc.
<%@ directiva ... %> (ASP.NET, JSP)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Alte caracteristici

recurgerea la containere de componente

un exemplu de referinta:
EJB (Enterprise Java Beans)

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Alte caracteristici

suport pentru arhitecturi/platforme avansate
de tip enterprise:

SOA Service Oriented Architecture
workflow-uri
grid computing
cloud computing

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

servere de aplicatii: facilitati
Utilizarea unui framework (cadru de lucru)

faciliteaza dezvoltarea de aplicatii Web complexe

ASP.NET: ASP.NET MVC, Vici MVC
Java: Play, Spring, Struts, Tapestry, Vaadin
Perl: Catalyst, CGI::Application, Jifty, WebGUI
PHP: CakePHP, CodeIgniter, Seagull, Symfony, Yii,
Python: Django, Grok, Zope
Ruby: Camping, Nitro, Rails, Sinatra

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Care este arhitectura unei aplicatii Web?
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

arhitectura aplicatiilor web
Uzual, implica trei strate (3-tier application)
Internet
(Web)
Client Server de aplicatii Stocare
(interface) (application) (persistence)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Sponge / Database
Jelly / Business Logic
Custard / Page Logic
Cream / Markup
Fruit / Presentation
C. Henderson, Scalable Web Architectures,
Web 2.0 Expo, 2007: iamcal.com/talks/
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

Sponge / Database
Jelly / Business Logic
Custard / Page Logic
Cream / Markup
Fruit / Presentation
C. Henderson, Scalable Web Architectures,
Web 2.0 Expo, 2007: iamcal.com/talks/
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: Flickr
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: flickr
Scop:
partajare on-line a continutului grafic (fotografii)

aplicatie reprezentativa a Web-ului social

agregare de comunitati imaginea ca obiect social

suport pentru adnotari via termeni de continut (tagging)
+ comentarii
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: flickr
Interactiune facila cu utilizatorul

Interactiune cu alte aplicatii via API-uri deschise

Unicode
internationalization (i18n) & localization (l10n)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: flickr
Servere de
baze de date
Servere
Web
Servere de
stocare foto
Internet (Web)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: flickr tehnologii
PHP (procesare application logic, acces la API,
sabloane de afisare via Smarty, modul de e-mail)
Perl (validarea datelor)
Java (managementul nodurilor de stocare)
MySQL (stocare in format InnoDB)
ImageMagick (prelucrare de imagini)
Ajax (interactiune asincrona)
Linux (platforma de rulare)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: flickr
API-uri existente
www.flickr.com/services/api/


implementari disponibile in limbaje precum
ActionScript, C, Java, .NET, Perl, PHP, Python, Ruby etc.
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: Wikipedia
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: wikimedia
Scop:
oferirea de continut deschis
via o suita de aplicatii Web colaborative: wiki-uri


alaturi de Wikipedia,
exista Wiktionary, Wikinews, Wikibooks, Wikiquote,
Wikisource, Wikiversity, Wikispecies, Wikimedia etc.
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: wikimedia tehnologii
MediaWiki (sistemul wiki utilizat pentru toate serviciile)
PHP (platforma pe care ruleaza MediaWiki)
MySQL (solutia principala de stocare)
ImageMagick, DjVu, TeX, rsvg, ploticus etc.
(pentru procesare de continuturi grafice in MediaWiki)
Lucene (indexare textuala, facilitind cautarea)
Linux (platforma de rulare)
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: wikimedia
Wikipedia: arhitectura generala
http://mituzas.lt/uc/workbook2007.pdf
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: wikimedia
Continutul este distribuit prin intermediul
CDN Content Distributed Network

sistem de caching Web permitind echilibrarea incarcarii
(load balancing) pe baza de criterii geografice

caching avansat pe niveluri
al continutului preponderent static

http://www.cs.huji.ac.il/labs/danss/p2p/resources.html

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

studiu de caz: wikimedia
API-uri pentru comunicarea via HTTP
dintre serverele de stocare a resurselor media
si serverele de aplicatii


exemple de operatii uzuale:
store, publish, delete, generate thumbnail

avansat
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

rezumat
programare Web la nivel de server
cookie-uri & sesiuni
servere de aplicatii Web
arhitectura generica a unei aplicatii Web
D
r
.

S
a
b
i
n

B
u
r
a
g
a

w
w
w
.
p
u
r
l
.
o
r
g
/
n
e
t
/
b
u
s
a
c
o

?

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