Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioni
1. Corso di Basi di Dati e Laboratorio
PHP – cookie e sessioni
Alfio Ferrara - Stefano Montanelli
A.A. 2005/2006 Basi di Dati e Laboratorio 1
La persistenza dei dati
• La natura stateless del Web richiede l’impiego di
tecniche capaci di simulare la persistenza delle
informazioni durante successive richieste tra
client (browser) e Web server
• Approcci possibili
– Cookie
– Sessioni
• Le informazioni relative a cookie e sessioni
vengono memorizzate nella cache del browser
– Sono condivise da tutte le istanze del programma
avviate con il medesimo profilo utente
A.A. 2005/2006 Basi di Dati e Laboratorio 2
Cookie – 1
• Previsti dal protocollo HTTP
• Sistema per immagazzinare dati lato client
• Il browser, ad ogni richiesta, invia al server
i dati immagazzinati nei cookie all’interno
dell’header HTTP
A.A. 2005/2006 Basi di Dati e Laboratorio 3
1
2. Cookie – 2
Client Web
HTTP request
(browser) Server
HTTP response
+
cookie
Prima richiesta
Successive richieste
Client HTTP request Web
(browser) + Server
cookie
A.A. 2005/2006 Basi di Dati e Laboratorio 4
Cookie – 3
• PHP prevede funzioni per
– inviare dati al client sotto forma di cookie
– interrogare i dati inviati al server nell’header
HTTP
A.A. 2005/2006 Basi di Dati e Laboratorio 5
Cookie – 4
• Per settare un cookie
– funzione setcookie
bool setcookie ( string name [, string value
[, int expire [, string path [, string domain
[, int secure]]]]])
• Dato che i cookie vengono inviati con
l’header HTTP, la funzione deve essere
chiamata prima di aver effettuato un
qualsiasi output
A.A. 2005/2006 Basi di Dati e Laboratorio 6
2
3. Cookie – 5
• Quando il valore di ritorno di setcookie è
true non significa che il client abbia
accettato il cookie ma solo che la sua
trasmissione è stata effettata con successo
• I cookie diventano visibili dalla pagina
successiva a quella in cui sono stati settati
• Sono recuperabili nella variabile
superglobale $_COOKIE
• Devono essere cancellati con gli stessi
parametri con i quali sono stati settati (con
valore uguale alla stringa vuota “”)
A.A. 2005/2006 Basi di Dati e Laboratorio 7
Cookie – 6
• Si possono settare anche cookie con valori
multipli facendo seguire un ‘[]’ al loro nome
• Con la stessa tecnica si possono inviare
cookie che simulino il comportamento degli
array associativi del PHP (e che come tali
saranno disponibili all’interno di $_COOKIE)
• Il client memorizzerà comunque una serie
di cookie separati
A.A. 2005/2006 Basi di Dati e Laboratorio 8
Sessioni – 1
• Le sessioni vengono utilizzate per
memorizzare dati lato server
• Ad una sessione viene associato un
identificatore (SID – session identifier) che
viene trasmesso da una pagina all’altra
– utilizzando i cookie
– specificandolo come parametro GET
A.A. 2005/2006 Basi di Dati e Laboratorio 9
3
4. Sessioni – 2
Client Web
HTTP request
(browser) Server
SID
SID HTTP response
SID
+
SID
Prima richiesta
Successive richieste
Client HTTP request Web
(browser) SID
+ Server
SID
SID SID
A.A. 2005/2006 Basi di Dati e Laboratorio 10
Sessioni – 3
• Nel php.ini è possibile stabilire se utilizzare
i cookie per trasmettere l’ID di sessione da
una pagina all’altra (direttiva
session.use_cookies)
• Altri parametri di configurazione delle
sessioni riguardano
– timeout
– Dominio di validità
– metodo di seralizzazione per i dati di sessione
(es. WDDX)
A.A. 2005/2006 Basi di Dati e Laboratorio 11
Sessioni – 4
• Uso del parametro GET per passare l’ID di
sessione
– Utile se il client non accetta cookies (+)
– Le url contengono l’ID di sessione. Non
ottimale per i bookmark o per i motori di
ricerca (-)
– Le informazioni sull’ID di sessione rimangono
nei log del web server e degli eventuali proxy,
anche in presenza di connessione protetta (-)
A.A. 2005/2006 Basi di Dati e Laboratorio 12
4
5. Sessioni – 5
• Come passare l’ID di sessione in GET?
– La costante SID puo’ essere usata per
comporre le url
echo
'<a href=”main.php?'.SID.'quot;>click here</a>';
– Se la direttiva session.use_trans_sid è
abilitata, il PHP provvede ad aggiungere
automaticamente l’ID di sessione alle url per i
tag specificati nella direttiva url_rewriter.tags
A.A. 2005/2006 Basi di Dati e Laboratorio 13
Sessioni – 6
• Uso dei cookie per le sessioni
– Nel momento in cui si inizia una sessione
viene inviato un cookie contente il nome e l’ID
della sessione
– Il client, ad ogni richiesta, invia il cookie al
server nell’header HTTP
– In presenza di un client che supporta (e
accetta) i cookie è la soluzione preferibile
A.A. 2005/2006 Basi di Dati e Laboratorio 14
Sessioni – 7
• Per iniziare una sessione occorre utilizzare
la funzione session_start() che crea una
nuova sessione o recupera i dati disponibili
da una sessione esistente il cui ID sia
arrivato al server attraverso GET, POST o
cookie
A.A. 2005/2006 Basi di Dati e Laboratorio 15
5
6. Sessioni – 8
• Se si utilizzano i cookie per le sessioni,
occorre chiamare la funzione
session_start() prima di aver prodotto un
qualsiasi output
• E’ possibile evitare l’uso della funzione
session_start() mediante il parametro di
configurazione session.auto_start
A.A. 2005/2006 Basi di Dati e Laboratorio 16
Sessioni – 9
• I dati memorizzati in sessione sono
disponibili nell’array superglobal
$_SESSION
• Manipolare l’array $_SESSION per creare e
cancellare variabili di sessione
$_SESSION[‘creditCardId’]=23346543321412;
unset($_SESSION[‘creditCardId’]);
A.A. 2005/2006 Basi di Dati e Laboratorio 17
6