TUTORIELS 
Manipuler des cookies avec un servlet
Une API permet de facilement créer, envoyer et lire des cookies via un servlet. On peut ainsi personnaliser les pages à la volée en récupérant des informations sur les utilisateurs.  (3 septembre 2001)
 

Les cookies, rappelons-le, sont des petits fichiers textes stockés sur le poste local de l'utilisateur, et contenant des informations le concernant qui sont ensuite récupérées, quand le visiteur se connecte à nouveau sur le site producteur du cookie, afin de personnaliser les services proposés. Les cookies peuvent être désactivés par les internautes: ils sont donc, malgré leurs aspects très utiles, à utiliser avec précaution.

Les manipuler en Java au sein d'un servlet est alors facilité par l'existence d'une API permettant de créer, envoyer, lire et spécifier les attributs des cookies. C'est à elle que nous allons nous intéresser ici.

Le "constructeur" admet deux paramètres: le nom du cookie et sa valeur. Il s'agit de deux chaînes qui ne doivent pas contenir les caractères suivants: [ ] ( ) = , " / ? @ : ; ainsi que le caractère "espace". On écrira par exemple:

Cookie monCookie = new Cookie("utilisateur", "unNom");

Il est possible de spécifier des attributs au cookie ainsi créé:

- setComment spécifie un commentaire associé au cookie (on utilisera getComment pour le lire).
- setDomain spécifie le nom du domaine d'application du cookie (on utilisera getDomain pour le lire): il s'agit de permettre la lecture du cookie par toutes les machines (hôtes) d'un même domaine, non plus seulement celle productrice et émettrice du cookie. Les noms de domaines doivent commencer par un point (ex: .journaldunet.com).
- setMaxAge spécifie la durée de vie en secondes du cookie (on utilisera getMaxAge pour la lire): si cette durée n'est pas précisée, la durée de vie du cookie est celle de la "session" (jusqu'à la fermeture du navigateur) et ne sera donc pas sauvegardée sur le poste client.
- setPath spécifie un chemin (sur le serveur) à partir duquel le cookie peut être lu (on utilisera getPath pour récupérer le chemin): si ce chemin n'est pas précisé, le cookie sera lisible depuis le répertoire (et ses sous-répertoires) de la page qui l'a envoyé. Le répertoire d'envoi doit par ailleurs obligatoirement faire partie du chemin spécifié.
- setSecure spécifie si le cookie doit être envoyé via SSL (connexion sécurisée) ou non. Il s'agit d'une valeur booléenne (on utilisera getSecure pour la lire).
- setName et setValue (pour la lecture, respectivement getName et getValue) vont permettre de spécifier nom et valeur du cookie.
- enfin, setVersion spécifie le numéro de version du protocole d'envoi des cookies (on utilisera getVersion pour récupérer l'information).


On enverra le cookie en l'ajoutant à l'en-tête (header) de la réponse HTTP produite par le servlet:

response.addCookie(monCookie);

Pour récupérer les cookies via la requête HTTP, on utilise la méthode getCookies qui renvoie un tableau de cookies qu'une boucle devra traiter. L'exemple suivant permet de clarifier le volet "lecture d'un cookie":

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;

public class Exemple extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
                         throws ServletException, IOException {

    Cookie[] cookies = request.getCookies();
    for(int i=0; i<cookies.length; i++) {
      Cookie cookie = cookies[i];
      String nomCookie = cookie.getName();
      if (nomCookie.equals( "utilisateur"))
        String nomUtilisateur = cookie.getValue();
    }
    
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println( "<BODY><P>Bonjour Mr" + nomUtilisateur + "!</P></BODY></HTML>");

  }
}

Suivant le volume d'informations stocké sous forme de cookies, on peut ainsi facilement personaliser l'interface HTML via un servlet, et donc à la volée.

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page