Question générale sur les Java servlets et la meilleure façon de gérer les requêtes. Si j'appuie sur ma méthode doGet à partir d'une requête de serveur distant:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
....
<do work here>
....
kill(request);
}
private void kill(HttpServletRequest request) {
//How do I kill the user session here?
}
Après avoir traité la demande de mon côté et généré ma sortie vers le demandeur, je veux essentiellement "tuer" leur session. Actuellement, cette session persiste et consomme ainsi de la mémoire. Ensuite, une fois le maximum atteint, tous les autres appels sont expirés.
J'ai essayé de créer un objet HttpSession en utilisant l'objet request, mais j'ai obtenu les mêmes résultats:
HttpSession session = request.getSession();
session.invalidate();
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
}
est la bonne façon de procéder, comme le suggère la documentation. Une nouvelle session sera créée une fois que le client aura envoyé une nouvelle demande.
Vous avez mentionné que vos sessions prenaient encore de la mémoire. Avez-vous d'autres références à ces objets sur la session?
Vous voudrez peut-être aussi jeter un œil à: Comportement de la session Servlet et Session.invalidate
vous pouvez supprimer un attribut d'une session en utilisant
session.removeAttribute("attribute name");
Essayez avec
session = request.getSession(false); // so if no session is active no session is created
if (session != null)
session.setMaxInactiveInterval(1); // so it expires immediatly
Si vous ne voulez pas un comportement de session, c'est-à-dire avoir un état entre plusieurs demandes. Pourquoi voulez-vous créer/utiliser une session? Ne créez pas de session ou ne stockez rien dans la session.
Pour vous assurer que votre code n'utilise pas de session, écrivez un wrapper de requête qui remplacera les méthodes getSession()
.
Définissez un délai d'expiration dans web.xml