JSP - Gestione dei cookie

In questo capitolo, discuteremo della gestione dei cookie in JSP. I cookie sono file di testo memorizzati sul computer client e vengono conservati per vari scopi di tracciamento delle informazioni. JSP supporta in modo trasparente i cookie HTTP utilizzando la tecnologia servlet sottostante.

Ci sono tre passaggi coinvolti nell'identificazione e nella restituzione degli utenti:

  • Lo script del server invia una serie di cookie al browser. Ad esempio, nome, età o numero di identificazione, ecc.

  • Il browser memorizza queste informazioni sulla macchina locale per un utilizzo futuro.

  • La volta successiva che il browser invia una richiesta al server Web, invia tali informazioni sui cookie al server e il server utilizza tali informazioni per identificare l'utente o può essere anche per altri scopi.

Questo capitolo ti insegnerà come impostare o reimpostare i cookie, come accedervi e come eliminarli utilizzando programmi JSP.

L'anatomia di un biscotto

I cookie vengono solitamente impostati in un'intestazione HTTP (sebbene JavaScript possa anche impostare un cookie direttamente su un browser). Un JSP che imposta un cookie potrebbe inviare intestazioni che assomigliano a questo:

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name = xyz; expires = Friday, 04-Feb-07 22:03:38 GMT; 
   path = /; domain = tutorialspoint.com
Connection: close
Content-Type: text/html

Come puoi vedere, il file Set-Cookie header contiene a name value pair, a GMT date, a path e a domain. Il nome e il valore saranno codificati in URL. Ilexpires Il campo è un'istruzione al browser per "forget" il cookie dopo l'ora e la data specificate.

Se il browser è configurato per memorizzare i cookie, manterrà queste informazioni fino alla data di scadenza. Se l'utente punta il browser su una qualsiasi pagina che corrisponde al percorso e al dominio del cookie, rinvierà il cookie al server. Le intestazioni del browser potrebbero assomigliare a questo:

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126

Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name = xyz

Uno script JSP avrà quindi accesso ai cookie tramite il metodo di richiesta request.getCookies()che restituisce un array di oggetti Cookie .

Metodi dei cookie servlet

La tabella seguente elenca i metodi utili associati all'oggetto Cookie che è possibile utilizzare durante la manipolazione dei cookie in JSP -

S.No. Metodo e descrizione
1

public void setDomain(String pattern)

Questo metodo imposta il dominio a cui si applica il cookie; ad esempio, tutorialspoint.com.

2

public String getDomain()

Questo metodo ottiene il dominio a cui si applica il cookie; ad esempio, tutorialspoint.com.

3

public void setMaxAge(int expiry)

Questo metodo imposta quanto tempo (in secondi) deve trascorrere prima che il cookie scada. Se non lo imposti, il cookie durerà solo per la sessione corrente.

4

public int getMaxAge()

Questo metodo restituisce l'età massima del cookie, specificata in secondi, per impostazione predefinita, -1 indicando che il cookie persisterà fino alla chiusura del browser.

5

public String getName()

Questo metodo restituisce il nome del cookie. Il nome non può essere modificato dopo la creazione.

6

public void setValue(String newValue)

Questo metodo imposta il valore associato al cookie.

7

public String getValue()

Questo metodo ottiene il valore associato al cookie.

8

public void setPath(String uri)

Questo metodo imposta il percorso a cui si applica questo cookie. Se non specifichi un percorso, il cookie viene restituito per tutti gli URL nella stessa directory della pagina corrente e per tutte le sottodirectory.

9

public String getPath()

Questo metodo ottiene il percorso a cui si applica questo cookie.

10

public void setSecure(boolean flag)

Questo metodo imposta il valore booleano che indica se il cookie deve essere inviato solo tramite connessioni crittografate (ovvero SSL).

11

public void setComment(String purpose)

Questo metodo specifica un commento che descrive lo scopo di un cookie. Il commento è utile se il browser presenta il cookie all'utente.

12

public String getComment()

Questo metodo restituisce il commento che descrive lo scopo di questo cookie o null se il cookie non ha commenti.

Impostazione dei cookie con JSP

L'impostazione dei cookie con JSP prevede tre passaggi:

Passaggio 1: creazione di un oggetto Cookie

Si chiama il costruttore di cookie con un nome di cookie e un valore di cookie, entrambi stringhe.

Cookie cookie = new Cookie("key","value");

Tieni presente che né il nome né il valore devono contenere spazi bianchi o uno dei seguenti caratteri:

[ ] ( ) = , " / ? @ : ;

Passaggio 2: impostazione dell'età massima

Usate setMaxAgeper specificare per quanto tempo (in secondi) il cookie deve essere valido. Il codice seguente imposterà un cookie per 24 ore.

cookie.setMaxAge(60*60*24);

Passaggio 3: invio del cookie nelle intestazioni della risposta HTTP

Usate response.addCookie per aggiungere i cookie nell'intestazione della risposta HTTP come segue

response.addCookie(cookie);

Esempio

Modifichiamo il nostro Form Example per impostare i cookie per il nome e il cognome.

<%
   // Create cookies for first and last names.      
   Cookie firstName = new Cookie("first_name", request.getParameter("first_name"));
   Cookie lastName = new Cookie("last_name", request.getParameter("last_name"));
   
   // Set expiry date after 24 Hrs for both the cookies.
   firstName.setMaxAge(60*60*24); 
   lastName.setMaxAge(60*60*24); 
   
   // Add both the cookies in the response header.
   response.addCookie( firstName );
   response.addCookie( lastName );
%>

<html>
   <head>
      <title>Setting Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Setting Cookies</h1>
      </center>
      <ul>
         <li><p><b>First Name:</b>
            <%= request.getParameter("first_name")%>
         </p></li>
         <li><p><b>Last  Name:</b>
            <%= request.getParameter("last_name")%>
         </p></li>
      </ul>
   
   </body>
</html>

Mettiamo il codice sopra in main.jsp file e usalo nella seguente pagina HTML -

<html>
   <body>
      
      <form action = "main.jsp" method = "GET">
         First Name: <input type = "text" name = "first_name">
         <br />
         Last Name: <input type = "text" name = "last_name" />
         <input type = "submit" value = "Submit" />
      </form>
      
   </body>
</html>

Conserva il contenuto HTML di cui sopra in un file hello.jsp e metti hello.jsp e main.jsp in <Tomcat-installation-directory>/webapps/ROOTdirectory. Quando accederaihttp://localhost:8080/hello.jsp, ecco l'output effettivo del modulo sopra.

Prova a inserire il nome e il cognome, quindi fai clic sul pulsante di invio. Questo mostrerà il nome e il cognome sullo schermo e imposterà anche due cookiefirstName e lastName. Questi cookie verranno ritrasmessi al server la prossima volta che farai clic sul pulsante Invia.

Nella sezione successiva, spiegheremo come puoi accedere a questi cookie nella tua applicazione web.

Leggere i cookie con JSP

Per leggere i cookie, è necessario creare un array di oggetti javax.servlet.http.Cookie chiamando ilgetCookies( )metodo di HttpServletRequest . Quindi scorrere l'array e utilizzaregetName() e getValue() metodi per accedere a ciascun cookie e valore associato.

Esempio

Leggiamo ora i cookie che sono stati impostati nell'esempio precedente:

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println("<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Mettiamo ora il codice sopra in main.jspfile e prova ad accedervi. Se imposti l'estensionefirst_name cookie come "John" e il last_name cookie come "Player" quindi in esecuzione http://localhost:8080/main.jsp mostrerà il seguente risultato -

Found Cookies Name and Value

Name : first_name, Value: John

Name : last_name, Value: Player

Elimina i cookie con JSP

Eliminare i cookie è molto semplice. Se desideri eliminare un cookie, devi semplicemente seguire questi tre passaggi:

  • Leggere un cookie già esistente e salvarlo nell'oggetto Cookie.

  • Imposta l'età dei cookie su zero utilizzando il setMaxAge() metodo per eliminare un cookie esistente.

  • Aggiungi di nuovo questo cookie nell'intestazione della risposta.

Esempio

L'esempio seguente ti mostrerà come eliminare un cookie esistente denominato "first_name" e quando si esegue main.jsp JSP la prossima volta, restituirà un valore nullo per first_name.

<html>
   <head>
      <title>Reading Cookies</title>
   </head>
   
   <body>
      <center>
         <h1>Reading Cookies</h1>
      </center>
      <%
         Cookie cookie = null;
         Cookie[] cookies = null;
         
         // Get an array of Cookies associated with the this domain
         cookies = request.getCookies();
         
         if( cookies != null ) {
            out.println("<h2> Found Cookies Name and Value</h2>");
            
            for (int i = 0; i < cookies.length; i++) {
               cookie = cookies[i];
               
               if((cookie.getName( )).compareTo("first_name") == 0 ) {
                  cookie.setMaxAge(0);
                  response.addCookie(cookie);
                  out.print("Deleted cookie: " + 
                  cookie.getName( ) + "<br/>");
               }
               out.print("Name : " + cookie.getName( ) + ",  ");
               out.print("Value: " + cookie.getValue( )+" <br/>");
            }
         } else {
            out.println(
            "<h2>No cookies founds</h2>");
         }
      %>
   </body>
   
</html>

Mettiamo ora il codice precedente nel file main.jspfile e prova ad accedervi. Verrà visualizzato il seguente risultato:

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Ora esegui di nuovo http: // localhost: 8080 / main.jsp e dovrebbe visualizzare solo un cookie come segue:

Found Cookies Name and Value

Name : last_name, Value: Player

È possibile eliminare manualmente i cookie in Internet Explorer. Inizia dal menu Strumenti e seleziona Opzioni Internet. Per eliminare tutti i cookie, fare clic sul pulsante Elimina cookie.