30 ebook a un prezzo mai visto!

Risparmia sui tuoi libri preferiti, mentre supporti la community Python Italia

➡️ Scopri gli ebook bundle
Home
Usare le sessioni

26 Settembre 2002

Usare le sessioni

di

Il protocollo HTTP è stateless, cioè non supporta il controllo dello stato tra una chiamata e la successiva. Le sessioni lato server sono un metodo per aggirare questa limitazione, vediamo cosa sono e come vengono utilizzate

Quando un cliente HTTP (ad esempio un browser) effettua una chiamata ad un server, questa vive di vita propria ed il server non è in grado di sapere se esiste una qualche relazione tra questa ed eventuali chiamate precedenti o successive.

Nel contesto di siti web statici questo potrebbe non essere un problema, il client effettua una Request ed il server risponde con una Response, nel pieno rispetto delle specifiche del protocollo.

Nel momento in cui, però, sia necessario collegare due request differenti, allora iniziano a sorgere i problemi.

Pensiamo ad esempio ad un sito di commercio elettronico, dove il contesto vede l’utente effettuare il login, riempire il carrello, inserire i dati della carta di credito e confermare l’ordine.

In un caso come questo è essenziale che il server HTTP sia in grado di capire che la request effettata da un certo client è associabile ad un’altra, cioè che si tratta esattamente dallo stesso client.

In altre parole il server deve essere in grado di capire che i dati della carta di credito che sono stati inviati con una request si riferiscono ad una certa lista di prodotti che è stata selezionata ed inviata in precedenza.

Il punto d’unione tra le request è ovviamente il client, cioè il browser.

Altre discriminanti, alcune già presenti come proprietà delle request stessa, come il tipo del browser, l’indirizzo IP del chiamante ecc. non sono sufficienti a distinguere univocamente il client, pertanto è necessario utilizzare strumenti diversi.

L’utilizzo delle sessioni permette di associare, lato server, chiamate che arrivino da uno stesso singolo client, legandole addirittura al pid del processo del client sulla macchina che lo ospita, questo garantisce unicità ed innumerevoli possibilità.

Come funzionano

Per ottenere questo comportamento è necessario che anche il client si adatti ad essere utilizzato in modo anomalo, ad esempio accettando cookies oppure infarcendo le request di dati aggiuntivi finalizzati al controllo della sessione.

I metodi tradizionali che permettono al server di riconoscere il client (e quindi di capire quali sono le sua request precedenti) sono i seguenti:

Utilizzo dei cookies: quando la sessione viene creata si crea un cookie sul client. Il contenuto cookie viene trasmesso insieme ad ogni request in modo che il server abbia la firma del client.

Trasmissione di informazioni aggiuntive: l’applicazione web viene costruita facendo in modo che ad ogni link sia aggiunta nella QueryString l’informazione dell’identificativo della sessione, altro modo consiste nel trasmettere l’identificativo della sessione attraverso campi nascosti dei form di inserimento dati.

Esempio

Se utilizziamo un motore JSP abbiamo a disposizione un oggetto session, istanza della classe HttpSession, bello e pronto. Dobbiamo soltanto utilizzarlo. Proviamo a farlo con l’esempio seguente.


<%
session = request.getSession(true);

String heading;
Integer accessCount = (Integer)session.getAttribute(“accessCount”);

if (accessCount == null)
{
accessCount = new Integer(0);
heading = “Welcome, Newcomer”;
}
else
{
heading = “Welcome Back”;
accessCount = new Integer(accessCount.intValue() + 1);
}
session.setAttribute(“accessCount”,accessCount);
%>


<%= heading %>


Informazioni di sessione:


















Info Type Value
ID <%= session.getId() %>
Accessi precedenti <%= accessCount %>
Data e Ora creazione oggetto session <%= new java.util.Date(session.getCreationTime()) %>


/

Se creiamo il file session1.jsp e lo inseriano nella ormai usuale directory

[TOMCAT_DIR]webappsapogeo, potremo raggiungerlo via HTTP attraverso l’url:

http://localhost:8080/apogeo/session1.jsp

/

Ecco il risultato della prima chiamata, cioè della prima request invocata dal browser:

L’oggetto session è stato creato automaticamente, gli è stato assegnato un ID e da quel momento è possibile utilizzarlo per aggiungervi informazioni utilizzando i metodi:

public void putValue(String name, Object value); (fino alle specifiche 2.1)

/

public void SetAttribute(String name, Object value); (consiglito dalle specifiche 2.2)

/

e recuperare le stesse informazioni attraverso i metodi:

public Object getValue(String name); (fino alle specifiche 2.1)

/

public Object getAttribute(String name); (consiglito dalle specifiche 2.2)

/

Per come è scritto il codice della JSP, una seconda chiamata alla stessa pagina (dallo stesso client) produrrà il seguente output:

Come si può intuire l’utilizzo delle sessioni permette la memorizzazione lato server di tutte le informazioni necessarie a legare tra loro request HTTP differenti in funzione dello specifico client.

È solo in questo modo che è possibile implementare carrelli della spesa per siti di commercio elettronico ed ogni sorta di applicazione web complessa.

L'autore

  • Massimo Canducci
    Massimo Canducci vanta oltre 25 anni di esperienza nel campo dell'innovazione e della digital transformation ed è Chief Innovation Officer per Engineering Ingegneria Informatica. È docente alla Singularity University, l'Università di Torino e l'Università di Pavia, e insegna in master MBA.

Iscriviti alla newsletter

Novità, promozioni e approfondimenti per imparare sempre qualcosa di nuovo

Immagine decorativa form newsletter
Gli argomenti che mi interessano:
Iscrivendomi dichiaro di aver preso visione dell’Informativa fornita ai sensi dell'art. 13 e 14 del Regolamento Europeo EU 679/2016.