Bonjour,
J'ai trouvé la solution donc je vous la met au cas ou ...
Si quelqu'un pouvait valider cette conception, ça serait sympa !
Côté serveur :
Mise en place d’un listener de session en plus du paramètre Session-Timeout
web.xml
1 2 3 4 5 6 7 8 9 10 11
| <listener>
<description>sessionListener</description>
<listener-class>
fr.meteo.servlet.auth.SessionListener
</listener-class>
</listener>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
SessionListener |
Classe SessionListener
Classe permettant la récupération de l’évenement de destruction de session qui induit un appel à la fonction de déconnection() de la classe DeconnectionServeur
(Plus suivi du nombre de session active avec un int sessionCount)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package fr.meteo.servlet.auth;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
private int sessionCount = 0;
public void sessionCreated(HttpSessionEvent event) {
synchronized (this) {
sessionCount++;
}
// System.out.println("Création de la session: " + event.getSession().getId());
// System.out.println("Nombre de Sessions: " + sessionCount);
}
public void sessionDestroyed(HttpSessionEvent event) {
synchronized (this) {
sessionCount--;
}
if (event.getSession().getAttribute("Login") != null){
DeconnectionServeur.deconnection((String)event.getSession().getAttribute("Login"));
}
// System.out.println("Suppresion de la session : " + event.getSession().getId());
// System.out.println("Nombre de Sessions: " + sessionCount);
}
} |
Gestion des Sessions
Création de la session avec la servlet de validation de connexion
/* Création de la Session */
HttpSession session = request.getSession(true);
session.setAttribute("Login", login);
Suppression de la session avec la servlet de déconnexion
HttpSession session = request.getSession(false);
session.invalidate();
Mise a jour de la session pour les autres servlets
HttpSession session = request.getSession(false);
Côté client :
Récupération de l’id de la session lors de la validation de la connexion d’un user(comportement d’un cookie)
1 2 3 4
| String cookieVal = connection.getHeaderField("Set-Cookie");
if(cookieVal != null) {
sessionId = cookieVal.substring(0, cookieVal.indexOf(";"));
} |
Insertion de l’id sous forme d’un cookie à chaque appel de servlet
connection.setRequestProperty("Cookie", sessionId);
Partager