Java servlet - 会话清理(HttpServletRequest)

时间:2012-04-05 21:21:19

标签: java session servlets request

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

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?
}

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

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

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

5 个答案:

答案 0 :(得分:24)

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

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

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

您还可以查看:Servlet Session behavior and Session.invalidate

答案 1 :(得分:5)

您可以使用

从会话中删除属性
session.removeAttribute("attribute name");

答案 2 :(得分:2)

尝试

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

在web.xml中设置超时期限