Ressource

Le protocole HTTP est dit dĂ©connectĂ©. C’est-Ă -dire que si depuis le navigateur on refait la mĂȘme requĂȘte le serveur a “oubliĂ©â€ que nous rĂ©alisons notre deuxiĂšme requĂȘte (stateless).

Session

Une session est un ensemble de requĂȘte dont le serveur se rappelle qu’elles appartiennent Ă  un mĂȘme client

Par exemple, lorsqu’on ajoute sur un site de e-commerce des articles Ă  notre panier alors comme nous n’avons pas de notion de session avec le protocole HTTP nous n’aurons qu’un seul article dans notre panier. Le serveur a oubliĂ© nos requĂȘtes prĂ©cĂ©dentes. Ceci Ă©tant assez contraignant, nous utilisons des cookies pour “simuler” les sessions.

Lors de la rĂ©ponse, en plus de nous renvoyer le html et css, le site de e-commerce renvoie un fichier contenant les informations de notre panier. Puis lorsqu’on va rĂ©aliser une nouvelle requĂȘte, en plus d’envoyer l’article Ă  ajouter nous envoyons Ă©galement le fichier contenant les articles dĂ©jĂ  ajoutĂ©s.

Session avec l’API Servlet

Pour enregistrer les informations en “session” on utilise

HttpSession session = request.getSession();
session.setAttribut("clé", valeur);

Puis lorsqu’on souhaite rĂ©cupĂ©rer un objet en session

HttpSession session = request.getSession();
Object object = sessions.getAttribut("clé");

Exemple

En nous appuyant sur le formulaire créé prĂ©cĂ©demment, nous souhaitons concatĂ©ner les noms d’une mĂȘme session. La diffĂ©rence est dans le doPost qui doit gĂ©rer la session

@WebServlet("/inscription")
public class InscriptionServlet extends HttpServlet {
 
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
 
		// Récupération des paramÚtres du formulaire
		String nomParam = request.getParameter("nom");
 
		Utilisateur user = (Utilisateur) request.getSession().getAttribute("user");
		if (user == null) {
			user = new Utilisateur();
			request.getSession().setAttribute("user", user);
		}
 
		user.nom = user.nom + " " + nomParam;
 
		request.setAttribute("message", "Inscription réussie pour " + user.nom);
 
		// Redirection vers la page de confirmation
		RequestDispatcher dispatcher = request.getRequestDispatcher("confirmation.jsp");
		dispatcher.forward(request, response);
	}
}
  1. L’utilisateur interroge pour la premiùre fois le serveur
  2. Si aucune session existe il en crée une puis retourne un JSESSIONID cookie au client
  3. Lors d’une nouvelle requĂȘte on fournit en plus le JSESSIONID

Ci-dessous, depuis le navigateur on a renseignĂ© le nom “Adrien” puis ensuite via le JSESSIONID depuis curl nous avons rajoutĂ© “CAUBEL” alt text

alt text