Pourquoi et quand exécuter cette tâche
Ces informations, associées à l'exemple de code
SessionSample.java, fournissent un modèle de programmation sur la
base duquel vous pouvez implémenter des sessions dans vos propres
servlets.
- Obtenez l'objet HttpSession.
Pour obtenir une session, utilisez la méthode getSession de l'objet javax.servlet.http.HttpServletRequest dans l'API Java™ Servlet 3.0.
Lorsque vous obtenez l'objet HttpSession, l'utilitaire de gestion de session utilise un des trois moyens suivants pour établir le suivi de la session : cookies, réécriture de l'URL ou informations SSL (Secure Sockets Layer).
Fonction obsolète: Le suivi de session utilisant l'ID SSL est obsolète dans WebSphere Application Server version 7.0.
Vous pouvez configurer le suivi de session en vue de l'utilisation de cookies ou modifier l'application en vue de la réécriture d'URL.
depfeat
Supposons que l'utilitaire de gestion de session utilise des cookies. Dans ce cas, il crée un ID de session unique et l'envoie au navigateur sous la forme d'un cookie. Chaque demande ultérieure émanant de cet utilisateur (émise via le même afficheur) transmettra le cookie contenant l'ID de session que l'utilitaire de gestion de session utilisera pour
localiser l'objet HttpSession existant de l'utilisateur.
Dans l'étape 1 de l'exemple de code, la valeur true est affectée à l'élément Boolean(create) afin que l'objet HttpSession soit créé s'il n'existe pas déjà. (Avec l'API Java Servlet 2.3 et suivantes, la méthode javax.servlet.http.HttpServletRequest.getSession() dépourvue d'élément booléen prend, par défaut, la valeur true et crée une session s'il n'en existe pas pour cet utilisateur).
- Stockez et récupérez les données définies par l'utilisateur dans la session.
Après l'établissement d'une session, vous pouvez ajouter et récupérer des données
définies par l'utilisateur dans la session. L'objet HttpSession possède des méthodes similaires à celles de la classe java.util.Dictionary pour l'ajout, l'extraction et la suppression d'objets Java arbitraires.
Dans l'étape 2 de l'exemple de code, le servlet lit un objet de type Integer à partir de l'objet HttpSession, l'incrémente, puis le réécrit dans l'objet. Vous pouvez utiliser n'importe quel nom pour identifier les valeurs contenues dans l'objet HttpSession. L'exemple de code utilise le nom sessiontest.counter.
L'objet HttpSession étant partagé entre les servlets auxquels l'utilisateur est susceptible d'accéder, il est conseillé d'utiliser une convention de dénomination unique pour l'ensemble du site afin d'éviter des conflits.
- (Facultatif) Affichez une page de réponse HTML contenant les données de l'objet
HttpSession.
- Fournissez à l'utilisateur des commentaires indiquant qu'une action a eu lieu au cours de la session. Vous pouvez transmettre le code HTML au navigateur client qui donne cette indication. Par exemple, dans l'étape 3 de l'exemple de code, le servlet génère une page Web qui est renvoyée à l'utilisateur et affiche la valeur de sessiontest.counter chaque fois que l'utilisateur accède à cette page Web au cours de la session.
- (Facultatif) Envoyez une notification aux modules d'écoute (listeners). Les objets stockés dans une session et qui implémentent l'interface
javax.servlet.http.HttpSessionBindingListener reçoivent une notification lorsque la session se prépare à prendre fin et à être invalidée. Cette notification permet d'effectuer des traitements post-session et de sauvegarder définitivement dans la base de données les modifications apportées pendant la session.
- Mettez fin à la session. Vous pouvez mettre fin à une session :
- De manière automatique avec l'utilitaire de gestion de session, si la session est inactive pendant un délai déterminé. Les administrateurs permettent d'indiquer le délai au terme duquel une session n'est plus valide.
- En ajoutant au code du servlet un appel à la méthode invalidate() de l'objet HttpSession.
Exemple
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionSample extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Step 1: Get the Session object
boolean create = true;
HttpSession session = request.getSession(create);
// Step 2: Get the session data value
Integer ival = (Integer)
session.getAttribute ("sessiontest.counter");
if (ival == null) ival = new Integer (1);
else ival = new Integer (ival.intValue () + 1);
session.setAttribute ("sessiontest.counter", ival);
// Step 3: Output the page
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Session Tracking Test</title></head>");
out.println("<body>");
out.println("<h1>Session Tracking Test</h1>");
out.println ("You have hit this page " + ival + " times" + "<br>");
out.println ("Your " + request.getHeader("Cookie"));
out.println("</body></html>");
}
}