8. Notion de session HTTP

L’interface HttpSession permet de définir la notion de session, qui n’existe pas en HTTP. Une session permet de suivre un utilisateur lors de sa navigation sur un site, de page en page. Elle peut être maintenue pendant un temps assez long, même de plusieurs jours, afin d’identifier un « utilisateur » qui reviendrait sur un site. La notion de session crée donc une notion de persistance, durant une certaine période fixée à l'avance. Au-delà d'une certaine durée d'activité, une session HTTP expire, et toutes les informations qui y sont attachées expirent. La gestion d'une session dans le standard Servlet peut se faire de deux manières. La manière la plus simple est de créer un cookie de session, envoyé au client, qu'il retournera dans l'en-tête HTTP à chaque requête. La valeur de ce cookie est un code de hachage, qui identifie un internaute de façon unique. Charge ensuite au serveur de conserver trace de ces cookies, et de les associer aux bons utilisateurs. Si le navigateur client refuse les cookies, alors ce code de hachage est ajouté à l'URL de requête dans le cas de requête par la méthode GET, et aux paramètres internes pour les requêtes de type POST. Deux types d'informations sont attachés à la session :
  • les informations standard : l'ID de session, la date de création, la date de dernière utilisation ;
  • les informations propres à l'application. Il s'agit d'objets Java (en principe sérializables), attachés à la session à l'aide de clés. Ces clés sont des chaînes de caractères.
Enfin, l'API servlet définit la possibilité de déclencher des callbacks lorsqu'une session va expirer. Examinons les principales méthodes exposées par l'interface HttpSession.
  • getId(), getCreationTime(), getLastAccessedTime() : retournent respectivement l'ID de session, sa date de création et la date de dernière visite du client concerné. Ces deux dernières dates sont exprimées sous forme de long, nombre de millisecondes depuis le 1 er janvier 1070, donc compatible avec java.util.Date.
  • setMaxActiveInterval(int) : indique le temps (en secondes) au bout duquel une session expire. Ce paramètre est fixé globalement à une application web dans le descripteur web.xml. Il peut aussi être changé par appel à la méthode getMaxActiveInterval(int).
  • isNew() : retourne true si la session est nouvelle. Cela peut arriver dans deux cas. Si le navigateur du client ne permet pas de fixer une session, dans ce cas le retour de cette méthode sera toujours true. Le deuxième cas, nominal, est celui de la première requête d'un nouveau client.
  • invalidate() : l'appel à cette méthode permet de forcer la fermeture d'une session.
  • getAttribute(String), setAttribute(String, Object): ces deux méthodes permettent d'attacher un objet Java quelconque à une session. Ces objets seront donc disponibles d'une requête à l'autre, de façon transparente pour le développeur d'application web. On prendra garde cependant à les utiliser avec parcimonie, dans la mesure où le coût de stockage de ces objets peut être important, et même devenir problématique.

Exemple 21. Fixer la taille maximale d'une session dans le fichier web.xml

 <session-config>
    <session-timeout>300</session-timeout>
 </session-config>

Java servlet et JSP
Retour au blog Java le soir
Cours & Tutoriaux
Table des matières
Introduction
1. Position de l'API Servlet
2. Présentation
Présentation de Tomcat
1. Un peu d'histoire
2. Organisation des répertoires de Tomcat
2.1. Répertoire bin
2.2. Répertoire conf
2.3. Répertoire lib
2.4. Répertoire log
2.5. Répertoire temp
2.6. Répertoire webapp
2.7. Répertoire work
3. Lancement de Tomcat
3.1. Lancement par défaut
3.2. Accéder à l'administration de Tomcat
3.3. Plusieurs instances de Tomcat
4. Configuration de Tomcat
4.1. Introduction
4.2. Élément Server
4.3. Élément Service
4.4. Élément Connector
4.5. Élément Engine
4.6. Élément Host
4.7. Élément Context
4.8. Élément GlobalNamingResources
4.9. Élément Realm
4.10. Élément Valve
5. Définition et chargement des applications web
5.1. Introduction
5.2. Prise en compte des éléments Context
5.3. Chargement et mise à jour à chaud
6. Utilisation de Tomcat avec Apache
API Servlet
1. Introduction
2. Une première servlet
2.1. Le code
2.2. Création de l'application web
2.3. Déploiement dans Tomcat
3. Concepts, cycle de vie
3.1. Requête
3.2. Réponse
3.3. Session
3.4. Application web
3.5. Contexte d'exécution
3.6. Cycle de vie
3.7. Filtre
4. Présentation générale de l'API
4.1. Introduction
4.2. Interfaces disponibles
5. Notion de servlet
5.1. Interfaces servlet
5.2. Cycle de vie d'une servlet
5.3. Paramètres d'initialisation d'une servlet
6. Notion de requête
6.1. Accès aux paramètres d'une requête
6.2. Accès aux éléments de l'en-tête HTTP
6.3. Accès aux éléments de l'URL
6.4. Accès aux paramètres du client
6.5. Accès aux informations de sécurité
6.6. Accès à la session, au contexte et aux informations d'initialisation
7. Notion de réponse
7.1. Contrôle du buffer de sortie
7.2. Contrôle de la réponse HTTP
8. Notion de session HTTP
9. Redirection ou inclusion d'une ressource
10. Listeners
10.1. Introduction
10.2. Événements de l'API Servlet
10.3. Ajout ou retrait d'un attribut
10.4. Création et destruction d'un contexte
10.5. Notification d'un objet attaché à un contexte
10.6. Déclaration d'un listener dans une application web
11. Connexion à une base
11.1. Introduction
11.2. Connexion manuelle
11.3. Connexion par utilisation de source de données
Filtrage
1. Filtrage de servlets
2. Mise en place d'un filtre
2.1. Écriture d'un filtre
2.2. Déclaration du filtrage
3. Filtrage d'une requête
4. Filtrage d'une réponse
4.1. Fonctionnement de ce filtrage
Java Server Pages
1. Introduction
2. Un premier exemple
2.1. Une première JSP statique
2.2. Une première JSP dynamique
2.3. Fonctionnement interne des JSP
3. JSP scriplet
3.1. Les expressions
3.2. Les déclarations
3.3. Variables prédéfinies
3.4. Scriplet de directives
4. Utilisation de beans
4.1. Introduction
4.2. Déclaration d'un bean existant
4.3. Création d'un nouveau bean
4.4. Utilisation des propriétés d'un bean
5. Inclure un contenu externe dans une JSP
5.1. Introduction
5.2. Inclusion au lancement de l'application
5.3. Inclusion au traitement de la requête
6. Utilisation de bibliothèques de tags
6.1. Introduction
6.2. Bibliothèque core
7. Internationalisation
7.1. Notion de bundle
7.2. Internationalisation de pages JSP
Projet exemple
1. Présentation du projet