Vous êtes sur la page 1sur 29

Les Sessions

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle 1

Plan
Introduction(Rappel du protocole HTTP) Gestion des tats Difrentes mcanisme de gestion detat Cookies Sessions et cookies Sessions sans cookies

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

HTTP gre les paires requte/rponse


connexion requte rponse

HTTP: protocole sans tats

HTTP: protocole sans tats


aucun

deconnexion

historique des diffrentes requtes nest conserv les requtes sont totalement indpendantes les unes des autres

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Une application Web a besoin de savoir


La gestion des tats


quel utilisateur a mis la requte les requtes dj mises par cet utilisateur ltat gnral actuel de lapplication nombre de visites, nombre de produits vendus, consults,

Il faut rajouter HTTP un mcanisme de gestion des tats

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Diffrentes techniques pour changer les donnes didentification de la session dans chaque requte:

Techniques de mmorisation

Authentification de lutilisateur champ de formulaire cach (hidden)


Cookies

<Input type="hidden" name="id" rcriture dURL value="674684641"> <ahref=" http://serveur/servlet/exemple // Creation du cookie ?id=674684641">Lien hypertexte</a> Cookie C = new Cookie("id","674684641 ");
// definition de la limite de validite C.setMaxAge(24*3600); // envoi du cookie dans la reponse HTTP res.addCookie(C);

persistants

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Champs de formulaires cachs


Principe

on cache les donnes de session dans les champs hidden


<INPUT TYPE=HIDDEN NAME=uid VALUE=valeur

Avantage

fonctionne mme si les cookies sont dsactivs

Inconvnients

beaucoup de travail toutes les pages doivent tre le rsultat de soumission de formulaires

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Rcriture dURL
Principe

ajouter dans la chane de requte du servlet des informations permettant didentifier la session http://host/path/file?jsessionid=1234&uid=valeur il est accd par chaque servlet mentionn qui rcupre les informations persistantes (SGBD, fichiers) partir de cet ID fonctionne mme si les cookies sont dsactivs

Avantage

Inconvnients

encodage des URLs (donnes visibles, caractres autoriss,longueur) toutes les pages sont dynamiquement gnres pas de bookmarks possibles
01/03/2012

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

Cookie: quest-ce quun cookie ?


Un cookie est compos dune paire nom/valeur et de plusieurs proprits pour renseigner le domaine, la dure de vie, la scurit...

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Illustration du fonctionnement des cookies :

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

Anatomie
Partie
Name Value Domain Path MaxAge Secure

Description
Identit du cookie Valeur du cookie Nom du domaine qui la dfini Information sur le chemin Date dexpiration du cookie Vrai si le cookie est transmis avec SSL

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

O sont-ils stocks ?
Netscape/Mozilla: dans un seul fichier IE: un fichier spar par site dans c:\Winnt\Profiles\user\Cookies

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

LAPI Servlet fournit la classe javax.servlet.http.Cookie pour travailler avec les Cookies

Pour la cration dun nouveau cookie, il faut lajouter la rponse (HttpServletResponse)

cookie String getName() : retourne le nom du cookie String getValue() : retourne la valeur du cookie setValue(String new_value) : donne une nouvelle valeur au cookie setMaxAge(int expiry) : spcifie lge maximum du cookie

Cookie(String name, String value) : construit un

La Servlet rcupre les cookies du client en exploitant la rponse (HttpServletRequest)

un cookie

addCookie(Cookie mon_cook) : ajoute la rponse

Cookie[] getCookies() : rcupre lensemble des cookies du site


01/03/2012

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

Cookie et scurit ?
Jamais interprt ou excut: pas de virus Un cookie est limit 4KB et les navigateurs se limitent 300 cookies (20 par site): pas de surcharge de disque Bien pour rendre prives des donnes non sensibles nom, adresse, mais pas numro CB Ne constitue pas un traitement srieux de la scurit

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Utiliser des cookies


Pris en charge par javax.servlet.http.Cookie Cette classe construit des cookies avec des paires nom/valeur
public Cookie (String name, String value)

On peut fixer des attributs supplmentaires

void setValue(String val): dfinit la valeur du cookie void setMaxAge(int expSec): nombre de secondes depuis le 01/01/1970, par dfaut -1 (expire quand on ferme le

client), 0 supprime le cookie

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Mthodes supplmentaires
void setPath(String path)

dfinit le chemin

void setSecure(boolean flag)

true si SSL, false par dfaut dfinit le domaine

void setDomain(String domain)

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Envoi de cookie
Mthode addCookie() de la classe HttpServletResponse
public void doGet(HttpServletRequest req, HttpServletResponse rep) { Cookie c = new Cookie(nom, toto); c.setMaxAge(365*24*3600); !// 1an rep.addCookie(c); rep.setContentType(text/html); }

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Lecture de cookie
Le navigateur envoie automatiquement les cookies correspondant domain et path Un servlet peut rcuprer les cookies envoys prcdemment au navigateur

mthode getCookies() de HttpServletRequest


public Cookie[] getCookies()

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Cookie [] cookies = request.getCookies(); String nom = getCookieValue(cookies, "nom", "non trouv"); ... public static String getCookieValue( Cookie [] cookies, String cookieName, String defaultValue) { for(int i=0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookieName.equals(cookie.getName()) return(cookie.getValue()); } return(defaultValue); }
Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

Lecture de cookie (2)

01/03/2012

Dfinition dune session


Les sessions

Utilises pour mmoriser les actions (requtes HTTP) dun utilisateur unique au cours du temps

une srie dinteractions lies entre un client et un serveur Web englobe plusieurs requtes HTTP sur une priode donne exemple: oprations bancaires, caddie,

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Illustration du principe

Source : http://www.javatpoint.com/http-session-in-session-tracking

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

20

Cycle de vie dune session

Java pour le dveloppement look-session-management-web-componentdeveloper-exam.html dapplications Web : Java EE Licence Professionnelle

Source : http://www.java-forums.org/ocpjwcd/54185-tutorial-depth21

Session et cookies

Source : http://www.java-forums.org/ocpjwcd/54185-tutorial-depthlook-session-management-web-component-developer-exam.html
Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle 22

Linterface HttpSession
Les objets HttpSession mmorisent les donnes de chaque utilisateur Fonctionnement similaire une table de hachage stocke sur le serveur chaque ID de session est associ, via la table de hachage, lensemble des informations de la session Les objets session rsident sur le serveur, et cest lobjet request qui maintient les informations Les sessions sont automatiquement associes au client via les cookies ou la rcriture dURL

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Linterface HttpSession

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

24

Accs lobjet session

Comportement de base des sessions


appel request.getSession pour recevoir un objet HttpSession (table de hachage associe lutilisateur) appel getAttribute sur lobjet HttpSession, rcuprer la valeur, vrifier si le rsultat est nul utiliser setAttribute avec une cl et une valeur removeAttribute supprime une valeur invalidate pour annuler une session logout pour dloguer le client de lapplication Web
01/03/2012

Extraire les informations associes une session

Mmoriser les informations de la session Supprimer les donnes de la session


Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

Deux mthodes de HttpServletRequest

Obtenir lobjet session


HttpSession getSession() retourne la session courante, si elle nexiste pas, elle est cre HttpSession getSession(boolean create) idem sauf que la session nest cre que si create=true, sinon retourne null

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Mmoriser et extraire les donnes


Une fois la session obtenue, on peut mmoriser et extraire les donnes grce aux mthodes de HttpSession
void setAttribute(String name, Object val) Object getAttribute(String name)

Exemple
HttpSession session = request.getSession(); session.setAttribute("compteur", compteur); Integer leCompteur = (Integer) session.getAttribute("compteur");
Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle 01/03/2012

Mthodes de HttpServletRequest
isRequestedSessionIdValid()

vrai si lID de la session est valide dans le contexte courant vrai si lID de la session provient dun cookie vrai si lID de la session provient dun URL retourne lID de la session

isRequestedSessionIdFromCookie()

isRequestedSessionIdFromURL()

getRequestedSessionId()

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle

01/03/2012

Mthodes de HttpSession
isNew()

vrai si nouvelle session

invalidate()

invalide la session et supprime les associations nom/valeur retourne lintervalle maximal dinactivit en secondes dfinit lintervalle maximal dinactivit en secondes retourne lidentifiant de la session
01/03/2012

getMaxInactiveInterval()

setMaxInactiveInterval()

getId

Java pour le dveloppement dapplications Web : Java EE Licence Professionnelle