Você está na página 1de 8

Gestion de Session

Session En JSP, la gestion d’une session est très


Une session est une séquence de requêtes de facile.
pages d’un même navigateur à un même
• les pages JSP ont accès dans les scripts
serveur web.
an objet implicite session

• des données peuvent être stockées et


La gestion d’une session permet de donner
récupérées en utilisant des méthodes
une continuité logique à une séquence de
associées à cet objet
requêtes.
• le conteneur JSP fait la gestion de session
automatiquement

Sessions c
Copyright Eliana Coelho 1 Sessions c
Copyright Eliana Coelho 2

IFT1149 IFT1149

Gestion de Session
Par défaut, toutes les pages JSP sont
associées à une session. Beans et Sessions
Si nous utilisons la directive:
Si nous ne voulons pas de session associée à <%@ page session="false" %>

une page JSP, il faut expliciter cela, par


l’utilisation de l’attribut session=”false” de pour indiquer qu’il la page n’a pas besoin de
la directive page: l’objet session, la page ne peut pas créer des
<%@ page session="false" %> beans avec scope=”session”; une erreur se
produira.
Pour expliciter l’utilisation d’une session:
<%@ page session="true" %>

Sessions c
Copyright Eliana Coelho 3 Sessions c
Copyright Eliana Coelho 4
Gestion de Session
Gestion de Session
Une session est associée à l’objet implicite
session et cet objet est accessible dans les La méthode setAttribut permet d’enregistrer
scriptlets: un objet dans une session; il faut passer
<%@ page session="true" %> comme argument une chaı̂ne de caractères
<% qui va permettre d’identifier l’objet et l’objet
String nomForm = request.getParameter( "nomUsager" );
session.setAttribute( "nom", nomForm ); qui doit être enregistré.
%>
...
<body> L’objet est maintenant accessible à toutes les
<a href="recupereSession.jsp">Continue</a>
pages JSP qui appartiennent à la même
</body>
</html> session.

Sessions c
Copyright Eliana Coelho 5 Sessions c
Copyright Eliana Coelho 6

IFT1149 IFT1149

Gestion de Session
La méthode getAttribute permet de récupérer
un objet associé à une session en fournissant
Gestion de Session
le nom d’identification de l’objet:
<%@ page session="true" %> Parce que les nombres et les autres valeurs
<%
primitifs ne sont pas des objets, nous ne
String nomUsager = (String) session.getAttribute("nom");
%> pouvons pas les enregistrer directement dans
<html> l’objet session avec la méthode setAttribute.
<head>
<title> Page de récupération de variable </title>
</head>
<body>
Il faut donc les convertir en objets avant de
Salut, <%= nomUsager %> les enregistrer dans la session, en utilisant les
</body>
classes enveloppes (wrappers).
</html>

Observe qu’il faut avoir une conversion


explicite (casting) au moment de la
récupération de l’objet!

Sessions c
Copyright Eliana Coelho 7 Sessions c
Copyright Eliana Coelho 8
Java - Wrappers
Gestion de Session
Java offre des classes enveloppes (wrappers)
pour toutes les valeurs primitifs; donc nous <%@ page session="true" %>
pouvons convertir les valeurs en objets: <%
int compteur;
Integer compteurInteger =
Integer objetInteger = new Integer(0); (Integer) session.getAttribute("compteur");
Double objetDouble = new Double(29.95); compteur = (compteurInteger != null)
? compteurInteger.intValue(): 0;
compteur++;
Nous pouvons faire la conversion dans le sens session.setAttribute("compteur",new Integer(compteur));
inverse: %>
....
Nombre de fois que cette page a ete visitée.
int valueInteger = objetInteger.intValue(); <%= compteur %>
double valueDouble = objetDouble.doubleValue();

Sessions c
Copyright Eliana Coelho 9 Sessions c
Copyright Eliana Coelho 10

IFT1149 IFT1149

Gestion de Session
Autres méthodes associées à l’objet implicite
session: Gestion de Session

• getId : retourne un identificateur unique Autres méthodes associées à l’objet implicite


généré pour chaque session session:

• getCreationTime: retourne le temps en • getMaxInactiveInterval : retourne la


milliseconds depuis que la session a été quantité de temps en milliseconds qu’une
créé; il faut passer cette valeur pour le session peut rester sans être accédée
constructeur de la classe Date ou à la avant d’être invalidée automatiquement;
méthode setTimeInMillis de la classe une valeur négative indique que la session
GregorianCalendar. ne doit jamais être invalidée.

• getLastAccessedTime: retourne le temps • invalidate: détruit la session.


en milliseconds depuis qu’une page
associée à la session a été sollicitée.

Sessions c
Copyright Eliana Coelho 11 Sessions c
Copyright Eliana Coelho 12
Gestion de Session
Exemple d’utilisation d’autres méthodes
associées à l’objet implicite session:
<% // Obtention des valeurs
String sessionId = session.getId();
long creation = session.getCreationTime();
long dernierAccess = session.getLastAccessedTime();
int maxInterInactif = session.getMaxInactiveInterval(); Gestion de Session
// Formattage des dates Si nous explicitons que nous ne voulons pas
Date dateCreation = new Date(creation);
de session associée à une page JSP avec
DateFormat fmtDateCreation =
new SimpleDateFormat("d/M/yyyy H:mm:ss"); l’utilisation de l’attribut session=”false” de
Date dateDernierAccess = new Date(dernierAccess); la directive page, l’objet session n’existe pas;
DateFormat fmtDateDernierAccess =
new SimpleDateFormat("d/M/yyyy H:mm:ss"); son utilisation dans la page produira une
%> erreur.
...
Identification de la session
<%= sessionId %>
Date de cr&eacute;ation
<%= fmtDateCreation.format(dateCreation) %>
Date du dernier acc&egrave;ss</th>
<%= fmtDateDernierAccess.format(dateDernierAccess) %>
Temps pendant que la session peut rester inactive
<%= maxInterInactif/ 60 + " minutes" %>

Sessions c
Copyright Eliana Coelho 13 Sessions c
Copyright Eliana Coelho 14

IFT1149 IFT1149

Gestion de Session
Gestion de Session Nous pouvons indiquer aussi dans le fichier
web.xml de l’application le temps par défaut
Il n’y a pas de limite par rapport au nombre
d’existence d’une session:
d’objets dans une session:
<session-config>
• le temps défaut d’existence d’une session <session-timeout>15</session-timeout>
</session-config>
est de 30 minutes

• ce temps peut être modifié par le Cela définit que la session durera par défaut
programmeur des pages JSP (la méthode 15 minutes.
setMaxInvalidationInterval(int secondes)
de l’objet session)
Cette balise doit venir après la balise
context-param.

Sessions c
Copyright Eliana Coelho 15 Sessions c
Copyright Eliana Coelho 16
Gestion de Session
Même si le conteneur JSP fait la gestion des Gestion de Sessions
sessions automatiquement, il faut tenir en En arrière-plan, il y a trois possibilités pour
compte qu’une dégradation dans la faire la gestion d’une session:
performance peut se produire
• Cookies
• si les objets dans la session sont très
grands • Réécriture de l’URL

• s’il y a plusieurs sessions au même temps • Champs cachés des formulaires

Page 62 du livre principal: indications de Le conteneur JSP fait la gestion de sessions


comment calculer la mémoire demandée pour en utilisant des cookies ou la réécriture de
les objets dans une session. l’URL.

Sessions c
Copyright Eliana Coelho 17 Sessions c
Copyright Eliana Coelho 18

IFT1149 IFT1149

Gestion de Sessions
Réécriture d’URL (URL Rewriting):
Gestion de Sessions • il faut ajouter des données extra à la fin
Les cookies peuvent être utilisés pour faire la de chaque URL qui identifie la session
gestion d’une session et c’est la solution la • le serveur peut associer l’identificateur de
plus utilisée: session avec les données stockées sur la
• un cookie est crée avec une valeur qui session
peut identifier uniquement la session La réécriture d’URL fonctionne même quand
• c’est la valeur de ce cookie qui va les cookies ne sont pas permis dans
permettre de faire la liaison logique entre l’ordinateur du client, cependant:
les requêtes qui viennent d’un même • il faut faire très attention de façon que
navigateur tous les URLs retournés au client ont
Cependant, les cookies peuvent ne pas être l’information extra ajoutée
permis dans l’ordinateur du client. • si le client quitte la session et revient
après via un lien ou un bookmark,
l’information extra peut être perdue

Sessions c
Copyright Eliana Coelho 19 Sessions c
Copyright Eliana Coelho 20
Gestion de Session
Dans les pages JSP, la gestion de session est
Gestion de Sessions
faite automatiquement est le programmeur ne
Nous pouvons ajouter un champ caché à un doit pas se préoccuper avec les détails de la
formulaire, où la valeur identifie la session: gestion de session, qui est fait en arrière des
<input type="hidden" name="session" value="..."> scènes en utilisant les cookies ou la réécriture
De cette façon, quand le formulaire est de l’URL.
soumis, le champ session et sa valeur sont
inclus dans les données GET ou POST. Le programmeur n’a pas à manipuler
explicitement le cookie pour identifier la
session ou ajouter cet identificateur aux
URLs.

Sessions c
Copyright Eliana Coelho 21 Sessions c
Copyright Eliana Coelho 22

IFT1149 IFT1149

Le concept de session est géré par le serveur:


Gestion de Sessions
• quand la première requête vient d’un
La gestion de sessions en JSP avec navigateur au serveur, le serveur définit
l’utilisation de cookies: le début d’une nouvelle session à laquelle
Navigateur est associée un nouvel identificateur de
Session_Id 531 session
Cookie
• l’identificateur de session est envoyé au
navigateur comme un cookie et un nouvel
Conteneur JSP
objet session est crée
Session_Obj 531

• le navigateur sauvegardera le cookie et va


le renvoyé aux requêtes futures
Session_Obj

"person"
• le serveur recevra l’identificateur de
person_obj
session et il saura que c’est la
"items" items_obj
continuation d’une session existante
... ....

.... .... • s’il n’y a pas de requêtes du navigateur


après un certain période de temps, l’objet
session sera détruit

Sessions c
Copyright Eliana Coelho 23 Sessions c
Copyright Eliana Coelho 24
Gestion de Session Gestion de Session

Si le client empêche l’utilisation de cookies, • response.encodeURL(url) → associe


JSP va être suffisamment intelligent pour l’identificateur de session à l’url passée
utiliser une autre stratégie pour la gestion de comme paramètre
sessions: la réécriture de l’URL. • response.encodeRedirectURL(url) →
L’ajout de l’identificateur de la session à tous associe l’identificateur de session à l’url
les liens est simplifié par l’existence de deux passée comme paramètre en cas de
méthodes associées à l’objet implicite redirectionner à une page
response: Les deux méthodes déterminent si les cookies
• encodeURL sont permis par le navigateur; si cela est vrai,
l’url passé comme paramètre est retourné
• encodeRedirectURL
sans modification.

Sessions c
Copyright Eliana Coelho 25 Sessions c
Copyright Eliana Coelho 26

IFT1149 IFT1149

Gestion de Session Si nous considérons que les cookies peuvent


ne pas être permis, il faut réécrire le code de
Dans notre exemple antérieur, à page du
cette façon:
début de la session, dans l’attribut action, il
<%@ page session="true" %>
y a l’url de la page qui enregistre la valeur du <%
nom fourni dans le formulaire: String url = response.encodeURL("enregistreUrlR.jsp");
%>
<%@ page session="true" %>
...
<html>
<form method="post" action="<%= url %>">
<head>
Quel est votre nom?
<title> Début de la session </title>
<input type="text" name="nomUsager" size="20" />
</head>
<input type="submit" value="Soumettre" />
<body>
</form>
<form method="post" action="enregistreSession.jsp">
....
Quel est votre nom?
<input type="text" name="nomUsager" size="20" />
<input type="submit" value="Soumettre"/>
Dans l’attribut action, la valeur est donnée
</form>
</body> par c’est qui la méthode encodeURL a
</html> retourné: l’url réécrit.

Sessions c
Copyright Eliana Coelho 27 Sessions c
Copyright Eliana Coelho 28
Sessions - Sans Cookies Sessions - Sans Cookies
Pour encoder un URL qui va être passé à la
La méthode sendRedirect de l’objet méthode encodeRedirectURL:
implicite response envoie une réponse au <%@ page session="true" %>
navigateur en indiquant un URL alternatif oú <%
session.setAttribute("nom","Eliana");
la requête doit être redirigée:
String url =
String url; "http://localhost:8080/ift1149/Sessions/pageRedirigee.jsp";
url = String urlEncode = response.encodeRedirectURL(url);
"http://localhost:8080/ift1149/Sessions/pageRedirigee.jsp"; response.sendRedirect(urlEncode);
response.sendRedirect(url); %>

Sessions c
Copyright Eliana Coelho 29 Sessions c
Copyright Eliana Coelho 30

Você também pode gostar