ePrometeusCorsoJavaJava
testi articoli
Testi Articoli  Download
Home | Eshop | Java | Tools | Web | 
CorsoJava è ora Video! Free for all!
Clicca Qui!

JAVA ESHOP PARTE TERZA
Un negozio online in Java e Linux - il Carrello
L'HTTP È SENZA STATO
SESSIONI
IL CARRELLO
L'ACQUISTO
CONCLUSIONI
L'AUTORE

<<< SESSIONI >>>

La soluzione di mantentere i dati interamente sul client ha i problemi visti prima, soprattutto legati alla codifica e decodifica degli stessi. Siccome il negozio è composto in gran parte da codice che viene eseguito sul server contestualmente alle richieste, il passo logico successivo è quello di pensare che le informazioni di stato possano venir mantenute direttamente sul server.

Abbiamo detto che il protocollo HTTP non è in grado di "ricordare" i passi eseguiti in precedenza, ma le applicazioni basate su un Web Server possono comunque aggirare il problema mantenendo una propria memoria. Ovvero si può usare un blocco di dati associato ad una particolare sequenza di interazioni di un determinato utente del Web. Questo blocco dati viene comunemente chiamato SESSIONE.

Facciamo un esempio per capire di che cosa stiamo parlando: se un utente si collega al nostro negozio online, inizia una sequenza di richieste al Web Server, che hanno in comune il fatto di provenire dallo stesso utente (e quindi dallo stesso browser in esecuzione). Man mano che l'utente sceglie le merci e le deposita nel carrello della spesa, possiamo mantenere sul server (in memoria, su un file o in una tabella di database) le informazione sulle merci che ha scelto il nostro cliente.

Queste informazioni devono però essere legate ad uno specifico utente, perché possono essere attivi contemporaneamente più utenti che stanno "facendo la spesa". Le informazioni su quello che ha fatto l'utente possono essere mantenute sul server ma occorre un piccolo aiuto da parte del client. Ovvero il browser deve comunicare continuamente al server una informazione per identificare il particolare utente attivo, e distinguerlo dagli altri. Questa informazione viene detta session id.

In questo modo al client non è più richiesto di memorizzare l'intero blocco dati legato ad un particolare utente attivo. Occorre solamente che venga mantenuto lo stretto necessario per identificare il blocco dati associato all'utente. Il session id è generalmente una stringa alfanumerica generata automaticamente con criteri di unicità. Esso può essere codificato nell'output HTML, ma generalmente si preferisce utilizzare una caratteristica dei Web Browser detta "cookies".

Un cookie è una stringa che il server chiede al browser di memorizzare, e che viene riproposta automaticamente dal browser ad ogni successiva richiesta da parte del server allo stesso sito. I sistemi che supportano le sessioni (per esempio le stesse Java Server Pages), generano alla prima richiesta di un utente un cookie contenente un nuovo session id. Da questo momento un blocco dati associato a quel particolare utente, identificato dal cookie, viene mantenuto in memoria. Con le Java Server Pages, la gestione delle sessioni è completamente trasparente al programmatore, che può utilizzarle senza necessità di eseguire altre operazioni.

Le sessioni hanno lo svantaggio di richiedere un cookie, che per ragioni di privacy non tutti i browser sono predisposti ad utilizzare, e impegnano un certo spazio in memoria sul server. Entrambi i problemi sono da considerarsi minori, in quanto oramai sul Web moltissimi siti utilizzano i cookie (con moderazione), e i motori di Java Server Pages sono abbastanza intelligenti da utilizzare poca memoria per mantenerla. Inoltre esistono dei meccanismi che permettono di riciclare la memoria occupata. Infatti una sessione se rimane inutilizzata per un certo periodo di tempo (di solito 20 minuti) "scade" e viene eliminata.

Deve essere cura del programmatore ovviamente utilizzare la sessione per mantenere pochi dati. Per esempio non è molto efficiente utilizzarla per mantenere le immagini dei prodotti scelti nel catalogo: è invece più opportuno, qualora le immagini servissero più volte, effettuare una query al database per visualizzarle, oppure utilizzare altri meccanismi di caching su file. Come sempre bisogna fare dei compromessi tra velocità di esecuzione e spazio utilizzato in memoria.

ePrometeus s.r.l. - Web Software House & Open Source System Integrator
MILANO - SAN BENEDETTO DEL TRONTO(AP)
Contatti: info@eprometeus.com