2. HTTP: un protocole non connecté
Le protocole HTTP est non connecté, c’est-à-dire qu’il
ne garde aucune information/trace concernant un
utilisateur entre deux requêtes.
Cela signifie que chaque requête est traitée
indépendamment des autres.
Comment faire alors le lien entre plusieurs requêtes
envoyées par un même utilisateur?
2
3. HttpSession
La session HTTP (classe HttpSession) est un moyen qui
permet de reconnaître les requêtes provenant d’un
même utilisateur pour une période limitée : la durée de
vie de la session.
- L’objet HttpSession peut être simplement considéré
comme un ensemble de requêtes/réponses
associées à un utilisateur donné.
- Une session permet de faire le lien entre les requêtes
d’un même utilisateur.
3
4. Fonctionnement des sessions
Lorsqu’un utilisateur accède pour la première fois à une
application web, le serveur Tomcat lui créé un nouvel
objet HttpSession avec un identifiant unique.
Cet identifiant va servir à Tomcat pour retrouver cet
objet HttpSession lors des requêtes suivantes
effectuées par cet utilisateur qui doivent
obligatoirement comporter cet identifiant.
4
Une session http est propre à chaque client du serveur
car elle est identifiée par un ID unique
6. Comment obtenir une session?
L’objet HttpSession s'obtient grâce à la
méthode getSession() de l'objet request argument des
méthodes doGet/Post(request, response):
HttpSession session=request.getSession()
La méthode getSession() retourne la session courante
associée à l’utilisateur effectuant la requête. Si
L’utilisateur n’a pas de session valide, cette méthode
demande la création d’une session si nécessaire.
6
7. Utilisation d’une session
Une session fonctionne comme une HashMap<String, Object>
Stocker des objets dans une session:
session.setAttribute(String clé, Object valeur)
(si la clé existe déjà, la valeur existante est remplacée
par la nouvelle).
Obtenir des objets d'une session
Object session.getAttribute(String clé)
(retourne l’objet associé à la clé ou la valeur null si la
clé n’existe pas).
7
8. Durée de vie d’une session
• Une session ne dure pas indéfiniment. Elle expire
après un certain temps paramétrable (un timeout).
• Par défaut, si l’utilisateur n’a effectué aucune
requête sur l’application web pendant 30 mn, alors le
serveur peut détruire sa session et également les
objets qu’elle contient.
8
9. Configuration du délai d'expiration de
la session HTTP
Le délai d'expiration (timeout) de la session en cours
peut être:
- Soit configuré dans le descripteur de déploiement
(web.xml) en ajoutant les balises :
<session-config>
<session-timeout>120</session-timeout>
</session-config>
- Soit être spécifié de façon programmatique :
HttpSession session=request.getSession();
session. setMaxInactiveInterval(120*60);
Contrairement à l' élément <session-timeout> qui avait une valeur en minutes,
la méthode setMaxInactiveInterval accepte une valeur en secondes .
9
10. Exemple d’utilisation
Considérons un site (simpliste) qui permet à un client de faire ses
courses en ligne. Il choisit des produits dans le formulaire suivant
et les transmet à un servlet pour qu'il les ajoute à son panier. Le
servlet va affecter un panier vide à chaque client quand il envoie
sa première requête.
10
11. Exemple d’utilisation (1)
- A chaque requête, le client sélectionne des produits et les
envoie au servlet pour les déposer dans son panier.
- Le servlet va faire ensuite une redirection vers une page JSP qui
affiche alors les produits sélectionnés par l’utilisateur et lui
permet grâce à un lien de retourner au formulaire pour en
ajouter d’autres à son panier.
11
12. Exemple d’utilisation (3)
On va d’abord stocker un panier dans l’objet request :
request.setAttribute("panier", panier)
Puis dans l’objet HttpSession:
session.setAttribute("panier", panier)
12
13. Exemple d’utilisation (4)
• Dans le premier cas, après chaque requête du
client, le container lui envoie une réponse et
détruit l’objet request avec les objets qu’il
contient. Donc le panier sera détruit et le
client perd ses produits sélectionnés entre
deux requêtes successives.
• Dans le deuxième cas, le panier reste
sauvegardé pendant une certaine durée dans
la session associée au client.
13