La plupart des applications web utilisent le protocole HTTP. Malheureusement ce protocole est ce que l'on appelle un protocole sans état, c'est à dire que le serveur web ne maintient pas les informations à propos du client entre deux requêtes. De ce fait le serveur ne sait pas déterminer si une requête ou une réponse provient du même client. C'est pour cela que les applications web utilisent le concept de session. Une session représente l'ensemble des intéractions pouvant intervenir entre un client et le serveur
Il existe deux méthodes permettant de créer des sessions :
HttpSession getSession()
et
HttpSession getSession(boolean)
Voici un petit exemple permettant de comprendre la différence entre ces 2 méthodes
// Si la session existe, ces 2 méthodes renvoient la session existante, sinon ces 2 méthodes créent une nouvelle session
HttpSession session = request.getSession();
HttpSession session = request.getSession(true)
// Si la session existe, cette méthode renvoie la session existante, sinon la méthode retourne la valeur null
HttpSession session = request.getSession(false);
A chaque session créée, le serveur envoie un identificateur (sous la forme d'un cookie) correspondant au client. Ensuite le client renverra ce cookie au serveur lors de sa prochaine requête permettant ainsi au serveur d'identifier le client.
Voici un petit exemple permettant d'ajouter un cookie dans l'entête de la réponse.
javax.servlet.http.Cookie cookie = new javax.servlet.http.Cookie("user","abc123456");
response.addCookie(cookie);
Mais il arrive assez souvent que le client refuse de recevoir des cookies.
Dans ce cas il vous reste une 2è solution qui consiste en la réécriture d'URL
Réécriture d'URL
Par cette technique le serveur ajoute l'dentificateur de session à la fin de chaque URL des pages envoyées par celui-ci.
Mais malheureusement cette technique a un coût car le serveur doit effectuer une opération supplémentaire. Celui-ci doit personnifier l'url en y incluant l'identifiant de session.
2 méthodes existent pour individualiser les URL:
encodeURL(String)
et
encodeRedirectURL(String)
Ces méthodes réécrivent l'URL uniquement si le client n'accepte pas les cookies. Dans l'autre cas les URL resteront inchangées.
La 2è méthode est utilisée lorsque la servlet utilise la méthode