TUTORIELS 
Gérer les sessions avec des servlets: introduction
L'API "HttpSession" permet aux servlets d'offrir une gestion des sessions à base de transmission par cookie ou par URL.  (25 octobre 2001)
 

Si vous êtes fidèle aux colonnes du JDNet Développeurs, vous êtes certainement déjà passé(e) maître dans l'utilisation des sessions sous Php3 ou Php4.
Rappelons tout de même qu'une session est un moyen qui permet de s'affranchir du protocole non connecté HTTP (contrairement au FTP) et de maintenir malgré tout, au fil des pages accédées par l'internaute, une transmission des données, le tout pour une période limitée : La durée de vie de la session.

La transmission des informations tout au long de la navigation de l'internaute s'opère soit explicitement si votre site ne dispose pas d'un système de gestion des sessions (il faut alors ajouter dans chaque lien, formulaire ou cookie, des variables destinées à véhiculer l'information), soit implicitement (ou presque!) grâce à ce qu'on appelle le "session-tracking".

Création de la session

Afin d'obtenir une session, un identifiant donc, pour notre internaute, nous allons utiliser la méthode "getSession" de l'objet "HttpServletRequest". Si getSession renvoie "null" la création de la session est autorisée, cela signifie qu'elle n'existait pas auparavant.
Nous pouvons néanmoins nous affranchir d'un tel test en passant le paramètre "true" à cette méthode. Ainsi, si aucune session n'existe déjà, une nouvelle sera automatiquement créee.
L'expression la plus simple de ce que nous venons d'énoncer est :

HttpSession session = request.getSession(true);

De même qu'en Php (avec session_start() en php4 par exemple), "getSession", doit être appelée avant de renvoyer un quelconque flux de sortie.

Récupération et stockage de l'information

Admettons que nous devions placer un nouvel élément dans un panier électronique, il nous faut vérifier si cet élément est le premier ou pas afin de créer, le cas échéant, le panier. Cela donne :

HttpSession session = request.getSession(true);
// On cherche à récupérer le contenu du panier

Panier articleprecedent = (Panier)session.getAttribute("articleprecedent");
if (articleprecedent != null)
{
     Traiter(articleprecedent);
}
else
{
     // Création du panier s'il n'existe pas déjà
     articleprecedent = new Panier();
     TraiterBis(articleprecedent);
}

Afin d'exploiter le résultat fourni par la méthode "getAttribute", on force la conversion par un "cast" : "(Panier)". On notera également l'utilisation de la méthode getAttribute au lieu de getValue ("deprecated" depuis la version 2.2 des servlets).

Passons maintenant au stockage d'une donnée, c'est le rôle de la méthode setAttribute("cle","valeur") :

HttpSession session = request.getSession(true);
session.setAttribute("disque", 110);

Terminer une session

Deux choix s'offrent à nous pour terminer une session, soit la laisser s'expirer seule, soit mettre fin à sa durée de vie en utilisant une méthode spécifique de l'objet HttpSession, il s'agit de invalidate(), elle s'utilise simplement :

HttpSession session = request.getSession(true);
session.invalidate();

Cette introduction n'a présenté que quelques-unes des méthodes disponibles pour l'objet HttpSession, vous pouvez retrouver ici celles qui n'ont pas été abordées.

 
[ Arnaud GadalJDNet
 
Accueil | Haut de page