Gestion des Sessions avec les Cookies HTTP dans les Applications Java Web

Les Cookies HTTP et les Sessions sont des mécanismes essentiels pour maintenir l'état dans les applicaitons web. Ce tutoriel explique leur fonctionnement et leur implémentation en Java.

Concepts de Base

Une session représente l'interaction d'un utilisateur avec un site web, depuis l'ouverture du navigateur jusqu'à sa fermeture. Une session est dite avec état lorsque le serveur peut reconnaître les requêtes successives d'un même client.

Technologies de Gestion de Session

  • Cookies : mécanisme côté client où le navigateur stocke des données envoyées par le serveur.
  • Sessions : mécanisme côté serveur qui associe les requêtes d'un client à un identifiant unique.

Par exemple, pour éviter une nouvelle authentification à chaque visite, on peut stocker un identifiant de session dans un cookie.

Manipulation des Cookies en Java Servlet

Pour accéder aux cookies envoyés par le client :

Cookie[] tableauCookies = requete.getCookies();

Pour créer et envoyer un cookie au client :

Cookie cookieVisite = new Cookie("derniereVisite", Long.toString(System.currentTimeMillis()));
cookieVisite.setMaxAge(86400); // Durée de vie : 1 jour (en secondes)
reponse.addCookie(cookieVisite);

Configuration de l'Expiration

La méthode setMaxAge définit la durée de vie du cookie :

  • setMaxAge(86400) : le cookie persiste pendant 1 jour.
  • setMaxAge(0) : supprime immédiatement le cookie.
  • setMaxAge(-1) : le cookie est suppprimé à la fermeture du navigateur (compotrement par défaut).

Limites des Cookies

  • Chaque cookie ne peut stocker qu'une seule paire nom-valeur.
  • Un site web peut envoyer jusqu'à 20 cookies par réponse.
  • La taille maximale d'un cookie est de 4 Ko.
  • Un navigateur limite le stockage total à environ 300 cookies.

Exemple d'Implémentation

Voici un servlet qui enregistre et affiche le timestamp de la dernière visite de l'utilisateur.

package com.example.web;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

public class HistoriqueVisiteServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        res.setContentType("text/html;charset=UTF-8");
        PrintWriter sortie = res.getWriter();
        
        Cookie[] tousCookies = req.getCookies();
        boolean visitePrecedenteTrouvee = false;
        
        if (tousCookies != null) {
            for (Cookie cookie : tousCookies) {
                if ("derniereVisite".equals(cookie.getName())) {
                    long horodatage = Long.parseLong(cookie.getValue());
                    sortie.append("Dernière visite enregistrée : " + new Date(horodatage).toString());
                    visitePrecedenteTrouvee = true;
                    break;
                }
            }
        }
        
        if (!visitePrecedenteTrouvee) {
            sortie.append("C'est votre première visite sur ce site.");
        }
        
        // Création d'un nouveau cookie pour la visite actuelle
        Cookie nouveauCookie = new Cookie("derniereVisite", String.valueOf(System.currentTimeMillis()));
        nouveauCookie.setMaxAge(86400);
        res.addCookie(nouveauCookie);
    }
}

Ce servlet est mappé dans le fichier web.xml avec une URL comme /historique. Le projet utilise Maven pour gérer les dépendances, notamment javax.servlet-api pour les classes Servlet.

Étiquettes: java-servlet http-cookie session-management java-ee Maven

Publié le 3 juin à 18h53