Introduzione
Il protocollo HTTP è detto “senza stato”, ovvero il server una volta servito il client non mantiene informazioni sulle richieste fatte. Questo perché implementare protocolli che mantengono lo “stato” sono complessi e dispendioso.
Ci sono molti casi in cui il server ha bisogno di ricordarsi degli utenti, per questo si possono usare i Cookie. Il meccanismo dei Cookie rappresenta un modo per creare una sessione di richieste e risposte HTTP “con stato” (stateful).
Sesione
La sessione rappresenta un contesto più largo rispetto alla richiesta/risposta. Ci possono essere diversi tipi di sessione in base al tipo di informazioni scambiate e la natura del sito.
Caratteristiche
Caratteristiche generali di una sessione:
- Ogni sessione ha un inizio e una fine.
- Ogni sessione ha un tempo di vita relativamente corto.
- Sia il client che il server possono chiudere la sessione.
- La sessione è implicita nello scambio di informazioni di stato
Sessione vs Connessione
Per sessione non si intende connessione persistente, ma una sessione logica creata da richieste e risposte HTTP. Una sessione può essere creata su connessioni persistenti e non persistenti.
Funzionamento
Il server mantiene tutte le informazioni riguardanti il client su un file e gli assegna un identificatore (cookie) che viene fornito al client. Il cookie inviato al client è un identificatore di sessione (SID).
- Il client ogni volta che manda una richiesta al server fornisce il suo identificatore (cookie): il browser consulta il file cookie, estrae il numero di cookie per il sito che si vuole visitare e lo inserisce nella richiesta http.
- Il server mediante il cookie fornito dal client accede al relativo file e fornisce risposte personalizzate.
Esempio
Dopo la prima richiesta del client, il server invia un set-cookie per inizializzare il cookie nel client.
Il client utilizzera quelo coockie in ogni risposta/richiesta al server per identificarsi.
Durata di un cookie
Il server può specificare la durata di una sessione inviando al client una intestazione set-cookie
nel messaggio con:
Max-Age = delta-seconds
definisce il tempo di vita in secondi di un cookie.Max-Age = 0
per chiudere la sessione.
Utilizzi
I cookie possono essere utilizzati per diversi scopi:
- autorizzazioni
- carta per acquisti
- preferenze dell’utente
- stato della sessione dell’utente (e-mail)
Privacy: i cookie permettono ai siti di imparare molte cose sugli utenti.
Alternative
Per mantenere lo stato e quindi creare una sessione senza utilizzare i cookie è possibili sfruttare metodo POST della richiesta HTTP.
Il client mantiene tutte le informazioni sullo stato della sessione e le inserisce in ogni richiesta inviata al server attraverso il metodo POST inserendole nell’URL.
Vantaggi
- Facile da implementare
- Non richiede l’introduzione di particolare funzionalità sul server
Svantaggi
- Può generare lo scambio di grandi quantità di dati
- Le risorse del server devono essere re-inizializzate ad ogni richiesta