P
'
t
i
t
e
C
h
a
t
t
e
 
spacer~ REAL GOOD CODE WITH GEEK FLAVOUR Articles | Connexion
 
~Les cookies en JSP

Précédent  
  JSP  
  Suivant
 Présentation

Afin de transmettre des informations d'une page à l'autre les Java Server Pages offrent diverses méthodes. Nous avons fait connaissance avec les sessions. Restent les fameux cookies.
 Sommaire


 Introduction

Comme chacun le sait, les cookies sont de petits fichiers texte contenant des informations sur votre vie, l'univers et le reste. Plus sérieusement, de nombreux sites, particulièrement les sites marchands, ont recours à ces instruments pour conserver des traces de vos visites. Parmi les informations conservées de la sorte se trouvent la majeure partie du temps de simples informations de préférences. Ou encore des informations d'authentification pour vous épargner la peine de saisir de nouveau votre nom d'utilisateur. Les cookies ne constituent pas une atteinte aussi importante envers votre vie privée que certains souhaiteraient le faire croire. Premièrement l'enregistrement de ces biscuits s'effectue sur votre disque dur. Faire le ménage parmi ceux-ci constitue une opération relativement simple. De plus, tous les navigateurs offrent la possibilité d'interdire leur utilisation. Enfin les cookies possèdent, comme leur pendant alimentaire, une date de péremption. Quoi qu'il en soit leur usage peut s'avérer très intéressant pour les auteurs de sites Internet.


 Lu et approuvé

L'emploi des cookies au sein d'une page JSP passe par l'utilisation de la classe javax.servlet.http.Cookie. Un cookie se voit désigné par un nom et une valeur. Vous avez également la possibilité de lui adjoindre un commentaire et une date de péremption. La manipulation des cookies liés au site passe par les objets request et response. Le premier permet de lire les cookies et le second d'en créer. Typiquement, les cookies sont stockés sur la machine cliente dans des fichiers dont le nom dépend de l'utilisateur et de l'adresse du site. L'utilisateur "gfx" créant un cookie sur le site linuxfr.org créera le fichier gfx@linuxfr[1].txt sous Windows par exemple. La méthode getCookies() de l'instance request renvoie un tableau de cookies. Si aucun cookie correspondant au site n'est trouvé sur la machine de l'utilisateur, un objet "null" se voit retourné. Voyons sans plus tarder comment inspecter l'ensemble des cookies installés par le site:

Cookie[] cookies = request.getCookies();
if (cookies != null)
{
  for (int i = 0, n = cookies.length; i < n; i++)
  {
    out.println(cookies[i].getName() + " : " + cookies[i].getValue());
    out.println("<br />");
  }
}
       
      
JextCopier dans Jext | Jext | Plugin Codegeek
Le cookie nommé "username" et de valeur "gfx" correspond à la représentation suivante sur le disque dur (ceci n'est qu'un exemple):

username
gfx
localhost/
1024
2275092992
29450223
3578110288
29450222
*
       
      
JextCopier dans Jext
Pour illustrer la création de cookies, nous allons écrire deux pages JSP. La première correspondra à une simple invite classique de login et la seconde affichera un message de bienvenue. Aucune vérification de mot de passe ne se verra effectué. Par contre, notre page remplira automatiquement le champ du nom d'utilisateur si celui-ci a déjà effectué une visite auparavant.


 La boîte de cookies

La première étape consiste à parcourir la liste des cookies disponible afin de trouver celui qui nous intéresse. Nantis d'une imagination phénoménale, nous déciderons de nommer notre cookie "username". En reprenant la boucle d'affichage des cookies, il nous suffira de quelques modifications fort simples pour parvenir à nos fins:

<%! String userName = ""; %>
<% Cookie[] cookies = request.getCookies();
if (cookies != null)
{
 for (int i = 0, n = cookies.length; i < n; i++)
 {
   if (cookies[i].getName().equals("userName"))
   {
     userName = cookies[i].getValue();
     break;
   }
 }
}%>
       
      
JextCopier dans Jext | Jext | Plugin Codegeek
La variable globale "userName" contient au sortir de la boucle le nom de l'utilisateur s'il s'est déjà présenté sur le site. Le champ de login peut alors se voir renseigné de la sorte:

<input type="text" name="login" value="<%= userName %>" />
       
      
JextCopier dans Jext
Mais que faire si l'utilisateur vient pour la première fois ? La solution consiste à créer le cookie après validation de cette première page. La page de login se trouve dans le fichier cookies.jsp tandis que la page de bienvenue apparaît dans le fichier cookiesSolve.jsp. Examinons donc ce dernier.


 La recette des cookies

Notre recette impose que le nom d'utilisateur (et accessoirement le mot de passe) ont été transmis à la page d'accueil par la méthode GET. C'est à dire encodés dans l'URL. Nous allons donc cuisiner un petit cookie contenant le nom d'utilisateur reçu.

<%
  Cookie user = new Cookie("username", request.getParameter("login"));
  user.setMaxAge(3600);
  user.setComment("Nom utilisateur");
  response.addCookie(user);
 %>
       
      
JextCopier dans Jext | Jext | Plugin Codegeek
Vous pouvez remarquer que nous ajoutons également un commentaire au cookie. Le support de cette fonctionnalité semble hasardeux. Le cookie créé se voit assigné une durée de vie de 3600 secondes, soit une heure. Un paramètre négatif implique que le cookie sera supprimé lorsque le navigateur fermera. Un paramètre de zéro supprime le cookie directement. Les cookies possèdent d'autres propriétés. Vous pouvez donc modifier leur valeur grâce à la méthode setValue(String). Un cookie se lie par défaut au site sur lequel la page est placée. Par le biais de la méthode setDomain(String) ont précise le DNS pour lequel le cookie est visible. Ainsi, cookie.setDomain(".posse-press.com") permet de voir le cookie depuis login.posse-press.com. La méthode setPath(String) permet de définir le domaine de visibilité du cookie en matière d'arborescence. Si vous exécutez le code cookie.setPath("/rep") le cookie sera visible à toutes les pages placées dans le répertoire, ou les sous-répertoires, rep du site. Vous pouvez ainsi créer des cookies possédant les même noms sur votre site mais accessibles depuis certaines pages seulement. Enfin, sachez que les cookies sont transmissibles par voie sécurisée, HTTPS ou SSL. Par défaut, ce n'est pas le cas. Si vous désirez y remédier, employez la méthode setSecure(boolean) en lui donnant le paramètre true.


 Une fournée de cookies et téléchargement

Maintenant que nos cookies sont tout chaud, il convient de les livrer. Pour cela point de logistique gigantesque, une méthode suffit. Invoquer response.addCookie(Cookie) insère le cookie spécifié dans l'en-tête http. En appelant cette méthode plusieurs fois vous pouvez expédier des paquets de plusieurs cookies. Nous avons fait le tour du sujet. Les cookies représentent un moyen relativement simple de conserver des informations sur les visiteurs. Contrairement aux sessions, ils se révèlent bien plus simples à administrer mais ont un usage quelque peu différent. Rappelez-vous que les sessions peuvent surtout servir à transmettre des objets Java d'une page à l'autre. Les cookies ont pour seul et unique intérêt d'écrire une chaîne de caractères sur la machine cliente. Nos fichiers d'exemples sont disponibles en téléchargement sur ce site.



par Romain Guy
romain.guy@jext.org
http://www.jext.org
Dernière mise à jour : 14/10/2006


Précédent  
  JSP  
  Suivant

 
#ProgX©2005 Mathieu GINOD - Romain GUY - Erik LOUISE