Skip to main content

Session

Pour conserver des informations entre deux requêtes d'un utilisateur, la norme Servlet utilisée par JEE et Spring met à disposition un objet appelé HttpSession.

Une session est un ensemble d'objets (nommés attributs de session) stockés en mémoire. Les attributs de session sont conservés côté serveur et la session est référencée sous un ID unique.

Lors de la création d'une session, le serveur renvoie le SessionID dans un cookie HTTP au navigateur. Le navigateur envoie ensuite ce cookie dans chaque requête pour que le serveur puisse retrouver la session liée à l'utilisateur.

La manipulation des sessions se fait directement dans les controller, grâce à l'objet HttpSession géré par Spring. La session sera créée à la première utilisation de l'objet HttpSession.

Pour utiliser la session, ajoutez l'argument HttpSession à vos méthodes.

@RestController
@RequestMapping("/session")
public class SessionController {

@PostMapping
public String incrementSession(HttpSession session) {
Integer compteur = (Integer) session.getAttribute("compteur");
// ATTENTION, compteur peut être null la première fois
if(compteur == null) {
compteur = 0;
} else {
compteur++;
}
session.setAttribute("compteur", compteur);
return "session mise à jour";
}

@GetMapping
public String getCompteur(HttpSession session) {
Integer compteur = (Integer) session.getAttribute("compteur");
return compteur;
}
}

A partir de notre ArticleController du TP4, l'objectif va être de stocker l'article envoyé en POST dans la session. Le GetMapping doit nous permettre de récupérer l'article stocké dans la session.

  1. Dans la méthode @PostMapping, ajoutez à la fin (avant le return) le stockage de l'article dans la session, avec le nom d'attribut "article".

  2. Dans la méthode @GetMapping, supprimez l'instanciation de l'article, renvoyez l'article stocké dans la session sous l'attribut "article" ou null s'il n'y a pas d'article dans la session.

  3. Observez les cookies envoyés et reçus dans les entêtes des requêtes avec Postman/Insomnia, que remarquez-vous ?

  4. Si vous redémarrez votre application, qu'advient-il de la session ?