Bonsoir à tous, depuis deux jours je planche sur les variables de sessions et ce soir j'ai une difficulté avec celles-ci. J'ai une page publique (index.jsp) et toutes les autres pages sont privées (donc accessible seulement une fois authentifié).
Lorsque l'usager entre ses informations et clique sur le bouton de connexion, les servlets vérifient s'il existe en bdd et créent une session.
1 2 3 4 5 6
|
HttpSession session = request.getSession(true);
session.setAttribute("connected", true);
session.setAttribute("idUsager", idUsager);
session.setAttribute("nomUsager", ((ClUsager) ListLogin.get(0)).getNom());
session.setAttribute("prenomUsager", ((ClUsager) ListLogin.get(0)).getPrenom()); |
L'usager se trouve alors dans la section privée et peux naviguer au travers des pages sans problèmes (j'ai mis des <% session.getAttribute("prenomUsager") %> dans le code et cela affiche correctement.
Mon problème arrive après la déconnexion. L'usager clique sur l'un des lien de déconnexion :
<a href="<%=appRoot%>/jsp/deconnexion.jsp">Déconnexion</a>
Et arrive sur cette page où la session est détruite.
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 32 33 34
|
<%@ page language="java" contentType="text/html; charset=iso-8859-1" %>
<%@ page import="java.util.Enumeration"%>
<%@ page import="java.*"%>
<%
String appRoot = request.getContextPath();
String key;
for (Enumeration names = session.getAttributeNames(); names.hasMoreElements(); ) {
key = (String) names.nextElement();
session.removeAttribute(key);
}
session.invalidate();
session = null;
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<script type="text/javascript">
function redirection(){
window.location = "<%=appRoot%>/index.jsp";
}
</script>
</head>
<body class="centrer" onLoad="setTimeout('redirection()', 2500)">
<h2>Déconnexion en cours</h2>
<p>Veuillez patientez...</p>
</body>
</html> |
Il est alors redirigé correctement vers index.jsp et les variables de session sont innexistantes (vérifié en mode débug). Cependant, en cliquant sur précédent deux fois, il peut revenir sur cette page pourtant sécurisée contre cette pratique avec les codes suivants:
1 2 3 4 5
| session = request.getSession(false);
if (session == null) {
RequestDispatcher rd = request.getRequestDispatcher("../index.jsp");
rd.forward(request,response);
} |
et
1 2
| <meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" /> |
Ma question est : Qu'est-ce que j'ai oublié?
Partager