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