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 1er 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.