Le Servlet e i Cookies in Java e in Javascript

Programmazione - Java Visite: 11972
Java

Le Servlet e i Cookies in Java

In questo articolo - manuale andiamo ad analizzare l'uso dei Cookies mediante alcuni esempi pratici sia in Java che in Javascript.
L'ambiente è quello tipico delle applicazioni web, quindi ad esempio uso di Servlet e pagine JSP.

Definizione di Cookie
"I cookie (che letteralmente vuol dire "biscottino") sono particolari informazioni trasmesse nell'intestazione HTTP.
I cookie sono inviati dal sito web e memorizzati sul computer client, anche sottoforma di file di testo.
Sono quindi re-inviati al sito web al momento delle visite successive. Le informazioni all'interno dei cookie sono spesso codificate
e non comprensibili. Furono inventati da Lou Montulli, al tempo impiegato della Netscape Communications."
[citazione quasi integrale presa da Wikipedia]

Come creare - eliminare un cookies in Java
Vediamo un esempio pratico su come rimuovere o creare un cookie mediante codice java:
Cookie cookie = new Cookie(Nome, Valore);
cookie.setMaxAge(secondi);
response.addCookie(cookie);


[La response è quella classica delle applicazioni web: HttpServletResponse response]

In questa maniera, si crea un cookie con nome "Nome" e gli si deve dare un dato valore "Valore".
Mediante il nome sarà possibile riconoscere il cookie.
Con il metodo setMaxAge() si setta il tempo di vita del cookie. Gli si deve passare il numero di secondi di vita.Se tale valore non viene settato il cookie verrà cancellato quando verrà cancellata la sessione attiva (ad es. quando si chiude il browser).
Se tale valore viene impostato a 0 (zero) il cookie viene eliminato. E' questo, appunto, il modo per eliminare un cookie dal browser.

Come leggere un Cookie in Java
Vediamo come si può leggere un cookie:

Cookie[] cookies = request.getCookies();
for(int i=0; cookies !=null && i<cookies.length; i++)
{
   if(cookies[i].getName().equals(Nome))
   {
      //Cookie trovato....si fa qualcosa
   }
}


[La request è quella classica delle applicazioni web: HttpServletRequest request]

Il metodo getCookies() ritorna un array di Cookie.
L'unico metodo è quello di girare tutti i cookie fino a trovare quello che ha il nome desiderato.
A questo punto se si vuole si può estrarre il valore e fare le operazioni del caso.
Gestione dei Cookie in Javascript
Facciamo subito un esempio:
<script type="text/javascript">
   var dateExpire = new Date();
   var dateNow = new Date();
   var days = ...tempo di vita espresso in giorni...;
   dateExpire.setTime(dateNow.getTime() + 24 * days * 3600000)

  
SetMyCookie(...nome..., ...valore..., dateExpire, '/');
</script>

dateExpire setta il tempo di vita del cookie. Nel mio esempio a partire da oggi lo si fa durare un certo numero di giorni definiti nella variabile days.
La funzione SetCookie() crea di fatto il cookie passando il nome, il suo valore e il suo tempo di vita.

Ecco la funzione setCookie:

function  SetMyCookie(cookiename,cookievalue) {
        //read passed parameter
        var argv =
SetMyCookie.arguments;
        var argc =
SetMyCookie.arguments.length;

        var expires = (argc > 2) ? argv[2]: null ;
        var path = (argc > 3) ? argv[3] : null;
        var domain = (argc > 4) ? argv[4] : null ;
        var secure = (argc > 5) ? argv[5] : false ;

        document.cookie = cookiename + "=" + escape(cookievalue) +
        ((expires == null) ? "" :("; expires=" + expires.toGMTString()))+
        ((path    == null) ? "" :("; path="    + path                 ))+
        ((domain  == null) ? "" :("; domain="  + domain               ))+
        ((secure  == true) ? "; secure  "          :"");

        return;
}


e l'analoga funzione per la cancellazione:

function delMyCookie(sNome) {
   
  var argv =
delMyCookie.arguments;
  var argc =
delMyCookie.arguments.length;
  var path = '/';
  var domain = (argc > 4) ? argv[4] : null ;
  var secure = (argc > 5) ? argv[5] : false ;
 
        
        document.cookie = sNome + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
 
   return;
}
Riferimenti
Molto molto interessante questo link : Ottima guida introduttiva all'uso dei cookie in java.