Java servlet – 会话清理(HttpServletRequest)

关于java servlet的一般问题和处理请求的最佳方法。 如果我从远程服务器请求中点击我的doGet方法:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ....  .... kill(request); } private void kill(HttpServletRequest request) { //How do I kill the user session here? } 

在我结束处理请求并生成输出到请求者之后,我想基本上“杀死”他们的会话。 目前,该会话徘徊,从而占用内存。 然后,一旦达到最大值,所有其他呼叫都将超时。

我尝试使用请求对象创建一个HttpSession对象,但得到了相同的结果:

 HttpSession session = request.getSession(); session.invalidate(); 

 HttpSession session = request.getSession(false); if (session != null) { session.invalidate(); } 

是文档建议的正确方法。 一旦发送新请求,将创建新会话。

你提到你的会话仍占用内存。 您是否在会话中对这些对象有任何其他引用?

您还可以查看: Servlet会话行为和Session.invalidate

您可以使用从会话中删除属性

 session.removeAttribute("attribute name"); 

试试吧

 session = request.getSession(false); // so if no session is active no session is created if (session != null) session.setMaxInactiveInterval(1); // so it expires immediatly 

如果您不想要会话行为,即在多个请求之间具有状态。 为什么要创建/使用会话。 不要创建会话或不在会话中存储任何内容。

要确保您的代码不使用会话,请编写一个覆盖getSession()方法的请求包装器。