Gestire le sessioni senza l'utilizzo dei cookies
Pagina 1 di 2
L'importanza delle sessioni nell'implementazione di applicazioni web dinamiche è fondamentale in quanto ci consentono di mantenere uno stato tra client e server. Questa esigenza è dettata dal fatto che il protocollo HTTP essendo per sua natura stateless, perde qualsiasi informazione relativa al client non appena finisce di servire la richiesta.
Mantenere uno stato, quindi, è essenziale in diversi casi, come operazioni su un carrello della spesa, loggarsi in un sito web e tante altre funzioni che attualmente sono implementati in diversi contesti web e che necessitano di tenere traccia delle azioni affettuate dal client.
Tutto ciò è reso possibile, appunto, dalla sessione che non è altro che una stringa alfanumerica generata dal server e che identifica una connessione con il client per un certo lasso di tempo.
Alla prima richiesta del client, il server invia un cookie leggero al browser che contiene l'ID della sessione relativa alla richiesta. In questo modo ad ogni operazione successiva del browser viene inviato l'ID contenuto in questo cookie ed il server tiene traccia delle operazioni che l' utente effettua nel sito web.
Questo tipo di cookie viene distrutto dal browser alla chiusura della pagina.
In questa breve guida spiegheremo come agire, con le JSP, nel caso in cui un utente abbia i cookie del browser disabilitati, e quindi si verrebbe a trovare in una serie di problemi nella navigazione e null'utilizzo del sito web.
Nelle Java Server Pages una sessione non è altro che un'istanza della classe HttpSession che viene creata dal server, e passata come riferimento alla servlet tramite oggetto HttpServletRequest. Vediamo come ottenere un' istanza all' interno di una servlet:
....
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
...
HttpSession session = request.getSession(true);
...
}
...
Il valore true che passiamo al metodo getSession() sta ad indicare di creare la sessione in caso ancora non è stata creata, altrimenti si passa il valore false.
In una pagina jsp invece possiamo utilizzare direttamente l'oggetto implicito session, che vedremo meglio fra poco in un esempio pratico.
Sessioni senza cookie
Rendere la nostra applicazione web indifferende nei riguardi dei cookies, cioè in grado di agire allo stesso modo a prescindere se i cookies sono abilitati o meno è un'operazione abbastanza semplice, se si prende in considerazione questo fattore in fase di progettazione. La tecnica che vi mostro viene definita URL-rewriting, e consiste nell'aggiungere a tutti i link contenuti nelle pagine del nostro sito l'ID di sessione tramite il metodo encodeURL della classe HttpServletResponse:
public String encodeURL(String url)Il vantaggio di questo metodo sta nel fatto che l'ID di sessione viene agganciato al link solo nel caso in cui i cookies non sono abilitati, in caso contrario il metodo non apporta nessuna modifica al link. Quindi condizione necessaria è quella di costruire tutti gli url (interni ovviamente) dell'applicazione web con il metodo encodeURL. Ecco come appare un url in caso di cookies disabilitati:
http://localhost/testsession.jsp;jsessionid=fbf1df21c007ffd8f5a73382eb2a







