SlideShare a Scribd company logo
1 of 6
Download to read offline
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
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
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
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
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
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

More Related Content

What's hot

What's hot (12)

Apache HTTP Server
Apache HTTP ServerApache HTTP Server
Apache HTTP Server
 
SaaS con Symfony2
SaaS con Symfony2SaaS con Symfony2
SaaS con Symfony2
 
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e httpsApache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
Apache HTTP Server - Funzionalità - Configurazione - Virtual Host - SSL e https
 
Build a SQL Server machine - the right way (Italian)
Build a SQL Server machine - the right way (Italian)Build a SQL Server machine - the right way (Italian)
Build a SQL Server machine - the right way (Italian)
 
PostgreSQL: Prima configurazione
PostgreSQL: Prima configurazionePostgreSQL: Prima configurazione
PostgreSQL: Prima configurazione
 
PostgreSQL : Tuning
PostgreSQL : TuningPostgreSQL : Tuning
PostgreSQL : Tuning
 
Apache Parte 2
Apache Parte 2Apache Parte 2
Apache Parte 2
 
Apache Parte 1
Apache Parte 1Apache Parte 1
Apache Parte 1
 
Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015Managing configuration in Drupal 8 - SIDCamp 2015
Managing configuration in Drupal 8 - SIDCamp 2015
 
SQL Server Modern Query Processing
SQL Server Modern Query ProcessingSQL Server Modern Query Processing
SQL Server Modern Query Processing
 
Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015Introduzione a Drupal e componenti del core - SIDCamp 2015
Introduzione a Drupal e componenti del core - SIDCamp 2015
 
Drupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e DrupalDrupal Day 2011 - Node.js e Drupal
Drupal Day 2011 - Node.js e Drupal
 

Similar to Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioni

Php concetti chiave di base
Php concetti chiave di basePhp concetti chiave di base
Php concetti chiave di base
Walter Liguori
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
guestbe916c
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
guestbe916c
 
SVILUPPO DI UNA SOLUZIONE SINGLE SIGN ON PER L’ENTE VENETO LAVORO
SVILUPPO DI UNA SOLUZIONE  SINGLE SIGN ON  PER L’ENTE VENETO LAVOROSVILUPPO DI UNA SOLUZIONE  SINGLE SIGN ON  PER L’ENTE VENETO LAVORO
SVILUPPO DI UNA SOLUZIONE SINGLE SIGN ON PER L’ENTE VENETO LAVORO
Zanatta Davide
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
DotNetCampus
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
Whymca
 
Guida esame 70 687 configuring windows 8
Guida esame 70 687 configuring windows 8Guida esame 70 687 configuring windows 8
Guida esame 70 687 configuring windows 8
Sebastiano Della Puppa
 

Similar to Laboratorio Di Basi Di Dati 10 P H P Cookie E Sessioni (20)

Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9Powerful asp.net 4 e ie9
Powerful asp.net 4 e ie9
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Php concetti chiave di base
Php concetti chiave di basePhp concetti chiave di base
Php concetti chiave di base
 
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
Laboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato ServerLaboratorio Di  Basi Di  Dati 07  Programmazione  Web Lato Server
Laboratorio Di Basi Di Dati 07 Programmazione Web Lato Server
 
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
Laboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato ClientLaboratorio Di  Basi Di  Dati 06  Programmazione  Web Lato Client
Laboratorio Di Basi Di Dati 06 Programmazione Web Lato Client
 
SVILUPPO DI UNA SOLUZIONE SINGLE SIGN ON PER L’ENTE VENETO LAVORO
SVILUPPO DI UNA SOLUZIONE  SINGLE SIGN ON  PER L’ENTE VENETO LAVOROSVILUPPO DI UNA SOLUZIONE  SINGLE SIGN ON  PER L’ENTE VENETO LAVORO
SVILUPPO DI UNA SOLUZIONE SINGLE SIGN ON PER L’ENTE VENETO LAVORO
 
L'impatto dei Servizi Applicativi
L'impatto dei Servizi ApplicativiL'impatto dei Servizi Applicativi
L'impatto dei Servizi Applicativi
 
Java lezione 16
Java lezione 16Java lezione 16
Java lezione 16
 
Net core base
Net core baseNet core base
Net core base
 
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
Azure Day Rome Reloaded 2019 - Ingestion nel datalake passando tramite API Ma...
 
Distribuzione delle sessioni in PHP in caso di load balancing su più server
Distribuzione delle sessioni in PHP in caso di load balancing su più serverDistribuzione delle sessioni in PHP in caso di load balancing su più server
Distribuzione delle sessioni in PHP in caso di load balancing su più server
 
Cert03 70-486 developing asp.net mvc 4 web applications
Cert03   70-486 developing asp.net mvc 4 web applicationsCert03   70-486 developing asp.net mvc 4 web applications
Cert03 70-486 developing asp.net mvc 4 web applications
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Guida esame 70 687 configuring windows 8
Guida esame 70 687 configuring windows 8Guida esame 70 687 configuring windows 8
Guida esame 70 687 configuring windows 8
 
Novità di Asp.Net 4.0
Novità di Asp.Net 4.0Novità di Asp.Net 4.0
Novità di Asp.Net 4.0
 
Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...Architetture web - Linguaggi e standard - Web server, application server, dat...
Architetture web - Linguaggi e standard - Web server, application server, dat...
 
HTML 5 e browser legacy
HTML 5 e browser legacyHTML 5 e browser legacy
HTML 5 e browser legacy
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
REST API fantastiche e dove trovarle
REST API fantastiche e dove trovarleREST API fantastiche e dove trovarle
REST API fantastiche e dove trovarle
 

More from guestbe916c

Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M LLaboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L
Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
guestbe916c
 
Corso Di Basi Di Dati 09 Modelli Controllo
Corso Di  Basi Di  Dati 09  Modelli ControlloCorso Di  Basi Di  Dati 09  Modelli Controllo
Corso Di Basi Di Dati 09 Modelli Controllo
guestbe916c
 
Esercitazioni 02 S Q L
Esercitazioni 02  S Q LEsercitazioni 02  S Q L
Esercitazioni 02 S Q L
guestbe916c
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionale
guestbe916c
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioni
guestbe916c
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
guestbe916c
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
guestbe916c
 
Corso Di Basi Di Dati 03 Progettazione Concettuale
Corso Di  Basi Di  Dati 03  Progettazione ConcettualeCorso Di  Basi Di  Dati 03  Progettazione Concettuale
Corso Di Basi Di Dati 03 Progettazione Concettuale
guestbe916c
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazione
guestbe916c
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logica
guestbe916c
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M L
guestbe916c
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Query
guestbe916c
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q L
guestbe916c
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
guestbe916c
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logica
guestbe916c
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Dati
guestbe916c
 
04 Progettazione Logica
04  Progettazione Logica04  Progettazione Logica
04 Progettazione Logica
guestbe916c
 
06 Normalizzazione
06  Normalizzazione06  Normalizzazione
06 Normalizzazione
guestbe916c
 

More from guestbe916c (20)

Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
Laboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M LLaboratorio Di  Basi Di  Dati 12  P H P   Gestione Di File  X M L
Laboratorio Di Basi Di Dati 12 P H P Gestione Di File X M L
 
Corso Di Basi Di Dati 09 Modelli Controllo
Corso Di  Basi Di  Dati 09  Modelli ControlloCorso Di  Basi Di  Dati 09  Modelli Controllo
Corso Di Basi Di Dati 09 Modelli Controllo
 
Esercitazioni 02 S Q L
Esercitazioni 02  S Q LEsercitazioni 02  S Q L
Esercitazioni 02 S Q L
 
Esercitazioni 01 Algebra Relazionale
Esercitazioni 01  Algebra RelazionaleEsercitazioni 01  Algebra Relazionale
Esercitazioni 01 Algebra Relazionale
 
Corso Di Basi Di Dati 10 Transazioni
Corso Di  Basi Di  Dati 10  TransazioniCorso Di  Basi Di  Dati 10  Transazioni
Corso Di Basi Di Dati 10 Transazioni
 
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
Laboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q LLaboratorio Di  Basi Di  Dati 04  P L  S Q L E  P Lpg S Q L
Laboratorio Di Basi Di Dati 04 P L S Q L E P Lpg S Q L
 
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
Corso Di  Basi Di  Dati 06  Esercizi Di Progettazione ConcettualeCorso Di  Basi Di  Dati 06  Esercizi Di Progettazione Concettuale
Corso Di Basi Di Dati 06 Esercizi Di Progettazione Concettuale
 
Corso Di Basi Di Dati 03 Progettazione Concettuale
Corso Di  Basi Di  Dati 03  Progettazione ConcettualeCorso Di  Basi Di  Dati 03  Progettazione Concettuale
Corso Di Basi Di Dati 03 Progettazione Concettuale
 
Corso Di Basi Di Dati 05 Normalizzazione
Corso Di  Basi Di  Dati 05  NormalizzazioneCorso Di  Basi Di  Dati 05  Normalizzazione
Corso Di Basi Di Dati 05 Normalizzazione
 
Corso Di Basi Di Dati 04 Progettazione Logica
Corso Di  Basi Di  Dati 04  Progettazione LogicaCorso Di  Basi Di  Dati 04  Progettazione Logica
Corso Di Basi Di Dati 04 Progettazione Logica
 
Corso Di Basi Di Dati 02 S Q L D M L
Corso Di  Basi Di  Dati 02  S Q L  D M LCorso Di  Basi Di  Dati 02  S Q L  D M L
Corso Di Basi Di Dati 02 S Q L D M L
 
Corso Di Basi Di Dati 02 S Q L Query
Corso Di  Basi Di  Dati 02  S Q L   QueryCorso Di  Basi Di  Dati 02  S Q L   Query
Corso Di Basi Di Dati 02 S Q L Query
 
Algebra
AlgebraAlgebra
Algebra
 
Esercitazioni 03 Algebra + S Q L
Esercitazioni 03  Algebra +  S Q LEsercitazioni 03  Algebra +  S Q L
Esercitazioni 03 Algebra + S Q L
 
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
Corso Di  Basi Di  Dati 01  Algebra Relazionale   OttimizzazioniCorso Di  Basi Di  Dati 01  Algebra Relazionale   Ottimizzazioni
Corso Di Basi Di Dati 01 Algebra Relazionale Ottimizzazioni
 
S Q L
S Q LS Q L
S Q L
 
Esercitazioni 04 Progettazione Concettuale E Logica
Esercitazioni 04  Progettazione Concettuale E LogicaEsercitazioni 04  Progettazione Concettuale E Logica
Esercitazioni 04 Progettazione Concettuale E Logica
 
Corso Di Basi Di Dati 08 Protezione Dei Dati
Corso Di  Basi Di  Dati 08  Protezione Dei DatiCorso Di  Basi Di  Dati 08  Protezione Dei Dati
Corso Di Basi Di Dati 08 Protezione Dei Dati
 
04 Progettazione Logica
04  Progettazione Logica04  Progettazione Logica
04 Progettazione Logica
 
06 Normalizzazione
06  Normalizzazione06  Normalizzazione
06 Normalizzazione
 

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