Les cookies représentent un moyen simple de stocker temporairement des informations chez un client,
afin de les récupérer ultérieurement. Concrètement il s'agit de fichiers
texte stockés sur le disque dur du client après réception d'une réponse
HTTP contenant des champs appropriés dans l'en-tête.
Les cookies font partie des spécifications du protocole HTTP.
Le protocole HTTP permet d'échanger des messages entre le serveur et le client à l'aide de requêtes HTTP et de réponses HTTP.
Les requêtes et réponses HTTP contiennent des en-têtes permettant d'envoyer des informations particulières de façon bilatérale.
Un de ces en-têtes est réservé à l'écriture de fichiers sur le disque: les cookies.
L'en-tête HTTP réservé à l'utilisation des cookies s'appelle Set-Cookie, il s'agit d'une simple ligne de texte de la forme:
Set-Cookie : NOM=VALEUR; domain=NOM_DE_DOMAINE; expires=DATE
Il s'agit donc d'une chaîne de caractères commençant par Set-Cookie : suivie par des paires clés-valeur sous la forme CLE=VALEUR et séparées par des virgules.
L'API servlet de Java propose un objet permettant de gérer de façon quasi-transparente l'usage des cookies,
il s'agit de l'objet Cookie.
La classe javax.servlet.http.Cookie permet de créer un objet Cookie
encapsulant toutes les opérations nécessaires à la manipulation des cookies.
Ainsi, le constructeur de la classe Cookie crée un cookie avec un nom et une valeur
initiaux passés en paramètre. Il est toutefois possible de modifier la valeur de ce cookie
ultérieurement grâce à sa méthode setValue().
Conformément à la norme HTTP 1.1, le nom du cookie doit être une
chaîne de caractères ne contenant aucun caractère spécial
défini dans la RFC 2068 (Il vaut mieux donc
utiliser des caractères alphanumériques uniquement).
Les valeurs par contre peuvent inclure tous les caractères hormis les espaces ou chacun
de ces caractères :
[ ] ( ) = , " / ? : ;
L'envoi du cookie vers le navigateur du client se fait grâce à la méthode
addCookie() de l'objet HttpServletResponse.
void AddCookie(Cookie cookie)
|
Etant donnée que les cookies sont stockés dans les en-têtes HTTP, et que celles-ci doivent être
les premières informations envoyées, la création du cookie doit se faire avant tout envoi de données
au navigateur (le cookie doit être créé avant toute écriture sur le flot de sortie de la servlet)
|
Cookie MonCookie = new Cookie("nom", "valeur");
response.addCookie(MonCookie);
Pour récupérer les cookies provenant de la requête du client, il
suffit d'utiliser la méthode getCookies() de l'objet HttpServletRequest
Cookie[] getCookies()
Cette méthode retourne un tableau contenant l'ensemble des cookies présents
chez le client. Il est ainsi possible de parcourir le tableau afin de retrouver un cookie
spécifique grâce à la méthode getName() de l'objet Cookie().
La récupération de la valeur d'un cookie se fait grâce à la
méthode getValue() de l'objet Cookie
String Valeur = Cookie.getValue()
L'exemple suivant permet de récupérer la valeur d'un cookie spécifique
(dont le nom est "LeCookieQueJeCherche") et d'afficher sa valeur sur le navigateur
du client :
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
public class AfficheMonCookie extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { ...
//
Cookie[] cookies = request.getCookies();
for(i=0; i < cookies.length; i++) {
Cookie MonCookie = cookies[i];
if (MonCookie.getName().equals("LeCookieQueJeCherche")) {
String Valeur = cookies[i].getValue();
}
}
// ecriture de la reponse
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head>");
out.println("<title>Mon Cookie</title>");
out.println("</head><body>");
out.println("Voici la valeur de mon cookie : " + Valeur");
out.println("</body></html>");
}
}
Voici l'ensemble des méthodes publiques de l'objet Cookie permettant
d'obtenir des informations sur le cookie ou bien de préciser certains paramètres :
Méthode |
Description |
Cookie(String Name, String Value)( |
Constructeur créant un objet Cookie de nom Name et de valeur Value) |
String getDomain() |
Retourne le domaine pour lequel le cookie est valide |
void setDomain(String Domain) |
Définit le domaine pour lequel le cookie est valide |
int getMaxAge() |
Retourne la durée de validité du cookie (en secondes) |
void setMaxAge(int duree) |
Définit la durée de validité du cookie (en secondes) |
String getName() |
Retourne le nom du cookie |
String getPath() |
Retourne le chemin pour lequel le cookie est valide |
void setPath(String Chemin) |
Définit le chemin pour lequel le cookie est valide |
boolean getSecure() |
Retourne true si le cookie doit être envoyé uniquement sur ligne sécurisée, sinon false |
boolean setSecure(Boolean flag) |
Définit si le cookie doit être envoyé sur une ligne sécurisée (SSL) |
String getValue() |
Retourne la valeur du cookie |
void setValue(String Valeur) |
Redéfinit la valeur du cookie |
int getVersion() |
Retourne la version du cookie |
void setVersion(int Version) |
Définit la valeur du cookie |
|