JSP - Gestion des cookies

Dans ce chapitre, nous aborderons la gestion des cookies dans JSP. Les cookies sont des fichiers texte stockés sur l'ordinateur client et ils sont conservés à diverses fins de suivi des informations. JSP prend en charge de manière transparente les cookies HTTP en utilisant la technologie de servlet sous-jacente.

L'identification et le retour des utilisateurs comportent trois étapes:

  • Le script serveur envoie un ensemble de cookies au navigateur. Par exemple, nom, âge ou numéro d'identification, etc.

  • Le navigateur stocke ces informations sur la machine locale pour une utilisation future.

  • Lorsque la prochaine fois que le navigateur envoie une demande au serveur Web, il envoie ces informations sur les cookies au serveur et le serveur utilise ces informations pour identifier l'utilisateur ou peut également l'être à d'autres fins.

Ce chapitre vous apprendra comment définir ou réinitialiser les cookies, comment y accéder et comment les supprimer à l'aide des programmes JSP.

L'anatomie d'un cookie

Les cookies sont généralement définis dans un en-tête HTTP (bien que JavaScript puisse également définir un cookie directement sur un navigateur). Une JSP qui définit un cookie peut envoyer des en-têtes qui ressemblent à ceci -

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

Comme vous pouvez le voir, le Set-Cookie header contient a name value pair, a GMT date, a path et a domain. Le nom et la valeur seront encodés en URL. leexpires champ est une instruction au navigateur pour "forget" le cookie après l'heure et la date données.

Si le navigateur est configuré pour stocker des cookies, il conservera alors ces informations jusqu'à la date d'expiration. Si l'utilisateur pointe le navigateur vers une page qui correspond au chemin et au domaine du cookie, il renverra le cookie au serveur. Les en-têtes du navigateur peuvent ressembler à ceci -

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

Un script JSP aura alors accès aux cookies via la méthode de requête request.getCookies()qui renvoie un tableau d' objets Cookie .

Méthodes de cookies de servlet

Le tableau suivant répertorie les méthodes utiles associées à l'objet Cookie que vous pouvez utiliser lors de la manipulation des cookies dans JSP -

S.No. Méthode et description
1

public void setDomain(String pattern)

Cette méthode définit le domaine auquel le cookie s'applique; par exemple, tutorialspoint.com.

2

public String getDomain()

Cette méthode obtient le domaine auquel s'applique le cookie; par exemple, tutorialspoint.com.

3

public void setMaxAge(int expiry)

Cette méthode définit la durée (en secondes) qui doit s'écouler avant l'expiration du cookie. Si vous ne définissez pas cela, le cookie ne durera que pour la session en cours.

4

public int getMaxAge()

Cette méthode renvoie l'âge maximum du cookie, spécifié en secondes, Par défaut, -1 indiquant que le cookie persistera jusqu'à l'arrêt du navigateur.

5

public String getName()

Cette méthode renvoie le nom du cookie. Le nom ne peut pas être modifié après la création.

6

public void setValue(String newValue)

Cette méthode définit la valeur associée au cookie.

sept

public String getValue()

Cette méthode obtient la valeur associée au cookie.

8

public void setPath(String uri)

Cette méthode définit le chemin auquel ce cookie s'applique. Si vous ne spécifiez pas de chemin, le cookie est renvoyé pour toutes les URL dans le même répertoire que la page actuelle ainsi que pour tous les sous-répertoires.

9

public String getPath()

Cette méthode obtient le chemin auquel ce cookie s'applique.

dix

public void setSecure(boolean flag)

Cette méthode définit la valeur booléenne indiquant si le cookie doit être envoyé uniquement via des connexions cryptées (c'est-à-dire SSL).

11

public void setComment(String purpose)

Cette méthode spécifie un commentaire qui décrit le but d'un cookie. Le commentaire est utile si le navigateur présente le cookie à l'utilisateur.

12

public String getComment()

Cette méthode retourne le commentaire décrivant l'objectif de ce cookie, ou null si le cookie n'a pas de commentaire.

Définition de cookies avec JSP

La configuration des cookies avec JSP implique trois étapes -

Étape 1: création d'un objet Cookie

Vous appelez le constructeur Cookie avec un nom de cookie et une valeur de cookie, qui sont tous deux des chaînes.

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

Gardez à l'esprit que ni le nom ni la valeur ne doivent contenir d'espaces blancs ou l'un des caractères suivants -

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

Étape 2: Définition de l'âge maximum

Tu utilises setMaxAgepour spécifier la durée (en secondes) du cookie doit être valide. Le code suivant installera un cookie pendant 24 heures.

cookie.setMaxAge(60*60*24);

Étape 3: Envoi du cookie dans les en-têtes de réponse HTTP

Tu utilises response.addCookie pour ajouter des cookies dans l'en-tête de la réponse HTTP comme suit

response.addCookie(cookie);

Exemple

Modifions notre exemple de formulaire pour définir les cookies pour le prénom et le nom.

<%
   // 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>

Mettons le code ci-dessus dans main.jsp fichier et utilisez-le dans la page HTML suivante -

<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>

Conservez le contenu HTML ci-dessus dans un fichier hello.jsp et met hello.jsp et main.jsp dans <Tomcat-installation-directory>/webapps/ROOTannuaire. Quand vous accéderezhttp://localhost:8080/hello.jsp, voici la sortie réelle du formulaire ci-dessus.

Essayez d'entrer le prénom et le nom de famille, puis cliquez sur le bouton Soumettre. Cela affichera le prénom et le nom sur votre écran et définira également deux cookiesfirstName et lastName. Ces cookies seront renvoyés au serveur la prochaine fois que vous cliquerez sur le bouton Soumettre.

Dans la section suivante, nous expliquerons comment vous pouvez accéder à ces cookies dans votre application Web.

Lire les cookies avec JSP

Pour lire les cookies, vous devez créer un tableau d' objets javax.servlet.http.Cookie en appelant legetCookies( )méthode de HttpServletRequest . Ensuite, parcourez le tableau et utilisezgetName() et getValue() méthodes pour accéder à chaque cookie et valeur associée.

Exemple

Lisons maintenant les cookies qui ont été définis dans l'exemple précédent -

<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>

Mettons maintenant le code ci-dessus dans main.jspfichier et essayez d'y accéder. Si vous définissez lefirst_name cookie comme "John" et le last_name cookie comme "Player" puis en cours d'exécution http://localhost:8080/main.jsp affichera le résultat suivant -

Found Cookies Name and Value

Name : first_name, Value: John

Name : last_name, Value: Player

Supprimer les cookies avec JSP

Supprimer les cookies est très simple. Si vous souhaitez supprimer un cookie, il vous suffit de suivre ces trois étapes -

  • Lisez un cookie déjà existant et stockez-le dans l'objet Cookie.

  • Définissez l'âge des cookies sur zéro à l'aide du setMaxAge() méthode pour supprimer un cookie existant.

  • Ajoutez ce cookie dans l'en-tête de la réponse.

Exemple

L'exemple suivant vous montrera comment supprimer un cookie existant nommé "first_name" et lorsque vous exécuterez la JSP main.jsp la prochaine fois, il retournera une valeur nulle pour 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>

Mettons maintenant le code ci-dessus dans le main.jspfichier et essayez d'y accéder. Il affichera le résultat suivant -

Cookies Name and Value

Deleted cookie : first_name

Name : first_name, Value: John

Name : last_name, Value: Player

Maintenant, exécutez à nouveau http: // localhost: 8080 / main.jsp et il ne devrait afficher qu'un seul cookie comme suit -

Found Cookies Name and Value

Name : last_name, Value: Player

Vous pouvez supprimer manuellement vos cookies dans Internet Explorer. Démarrez dans le menu Outils et sélectionnez les Options Internet. Pour supprimer tous les cookies, cliquez sur le bouton Supprimer les cookies.