Programmation Internet et Java

publicité
ISI 1022 : Programmation Internet et Java
J2EE : Suivi de Sessions
Programmation Internet et Java
Jean-Noël Sorenti. Année 2002/2003
Le Suivi de session sous J2EE
ISI 1022 : Programmation Internet et Java
1
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Suivi de Sessions
l
Programmation Internet et Java
Une application Web peut avoir besoin de
conserver des informations avec un client :
• Quel Client présente quelle requête ?
• Quelles sont les requêtes précédant celle-ci ?
l
Exemples :
• Ouverture de session (login) pour des raisons de
•
•
sécurité
Gestion de réservation
Gestion de caddies pour le commerce électronique.
2
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Problème de HTTP
l
Programmation Internet et Java
HTTP est un protocole sans état :
• A chaque requête, on a toujours les étapes de
connexion et déconnexion.
• HTTP ne peux pas faire de lien direct entre deux
requêtes consécutives d’un même utilisateur.
• La Solution sera d’attribuer un ID temporaire pour
chaque utilisateurs.
3
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Utilisation d’un ID pour le suivi de Sessions
l
Gestion de L’ID pour les session :
ID1,ID2
n’existent pas,
il sont créés
Client 1
Client 2
Client 1
Client 2
ID 1
ID 1
ID 2
ID 2
ID 1
ID 1
ID 2
ID 2
Table d’ID
ID 1
ID 2
Identifié !
4
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Solution de l’ID
l
Programmation Internet et Java
Solution pour la gestion des sessions :
• Cookie temporaire (avec ID Stocké dedans) :
• C’est à l’aide d’un cookie que la gestion des sessions est gérée
automatiquement par l’Api Servlets/JSP.
• Cette gestion est transparente pour les programmeurs (100%
automatisée). Il suffit que le Web Browser accepte les cookies.
• ID en champ caché ou dans l’URL :
• Si le navigateur Web n’accepte pas les cookies, l’ID devra être
présent dans les pages HTML que reçoit le client, pour être
renvoyé par la suite au Serveur. L’Api Servlet/JSP possèdera alors
des fonctions simple pour cette gestion.
5
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Solution de l’ID sans l’aide de cookies.
l
Si les cookies sont désactivés, il faut alors
utiliser la réécriture de l’URL à la place :
• Utilisation de HttpServletResponse.encodeURL(‘’ ‘’)
• Toutes les URL dépendantes des sessions devront
•
être encodées.
Exemple dans un fichier JSP :
…
<FORM ACTION=‘<%=response.encodeURL(‘/path’)%>’ >
…
• Dans l’exemple, encodeURL permet d’ajouter
automatiquement l’ID au champ ACTION.
6
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Suivi de Sessions
l
Nous avons une session par client :
Table d’ID
Client 1
ID 1
Session 1
Client 2
ID 2
Session 2
Client 3
ID 3
Session 3
7
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Classe HttpSession
l
Programmation Internet et Java
Nous disposons dans J2EE Servlet d’un objet
session par utilisateur :
• L’objet de session implémente l’interface HttpSession
• Il est fourni par le Serveur d’application.
• On peut le récupérer avec la fonction getSession()
•
•
disponible dans request (de HttpServletRequest)
L’ID est stocké dedans
Notre objet est un conteneur (comme request,
context,…)
8
L’objet Session peut être récupéré avec l’objet request car ce denier comporte
les informations sur le client, plus précisément son ID !
Le fait que notre objet session soit un conteneur implique que l’on pourra stocker
des objets dedans et que ces derniers serons persistant pendant la session d’un
utilisateur et que ces informations lui seront propres.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Classe HttpSession
l
Programmation Internet et Java
Récupération de l’objet Session avec la méthode
getSession() de request :
• getSession() : crée et renvoie une nouvelle session si
•
•
aucune session n’a encore été crée ou renvoie la session
existante. Identique à getSession(true).
getSession(false) renvoie la session existante, mais n’en
crée pas de nouvelle.
HttpSession est un conteneur sous forme de table
associative :
• Tout Objet peut être stocké dedans avec la méthode setAttributes.
• Les clefs sont des chaînes de caractères.
9
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Exemple du caddie
l
Programmation Internet et Java
Exemple dans une servlet :
public class ajoutDansCaddieServlet extends HttpServlet {
public void service(HttpServletRequest req, HttpServletResponse res) {
}
}
Caddie monCaddie = null;
HttpSession session = req.getSession(); //Renvoie session courante ou
//en crée une nouvelle.
if (session.isNew() {
monCaddie = new Caddie();
session.setAttribute(‘’caddie’’,monCaddie);
}
else { //Si session existe déjà alors le caddie aussi.
monCaddie = (Caddie)session.getAttribute(‘’caddie’’);
}
monCaddie.ajoute(request.getParameter(‘’article’’));
10
Dans cette exemple, Caddie représente un ensemble d’article.
Exercice :
Essayer de modéliser la classe Caddie ainsi que la servlet
permettant l’ajout d’éléments dedans.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Invalidation et expiration de Sessions
l
Les sessions peuvent être invalidées à l’aide de
la fonction membre :
• session.invalidate();
l
Elle peuvent aussi expirer après un certain
temps d’inactivité :
• Le délai d’attente par défaut est généralement de 30
•
•
minutes.
Peut être défini à l’aide de la fonction
HttpSession.setMaxInactiveInterval(int seconds).
Peut être aussi configuré dans le fichier web.xml.
11
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Notification d’évènements dans une session
l
Un objet présent dans un conteneur session
peut être averti si sa session expire ou est
invalidée :
• Pour que l’objet soit averti, il faudra qu’il implémente
•
•
l’interface HttpSessionBindingListener.
On pourra alors définir la méthode valueUnbound()
qui serra appelée à l’expiration de la session.
Utile pour libérer des ressources.
12
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Stockage d’informations entre sessions
l
On peut aussi utiliser des cookies pour stocker
des informations dans le navigateur sur de
longues périodes :
• Le navigateur est censé prendre en charge 20 cookies
par serveur – de maximum 4096 Octets chacun.
• La durée de vie par défaut du cookie est maxAge = -1
(détruit à la fermeture du navigateur).
• Par défaut, les cookies ne peuvent être renvoyés qu’à la
servlet qui les a créés.
13
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Stockage d’informations entre sessions
l
Mise en pratique des cookies :
• Pour l’utilisation de cookies, on a les éléments suivants :
• HttpServletRequest.getCookies() : récupère le tableau de
cookies du client.
• HttpServletResponse.addCookie(new Cookie) : pour stocker un
cookie chez le client.
• Javax.servlet.http.Cookie : la classe du cookie !
14
Jean-Noël Sorenti – Année 2002/2003
Téléchargement