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()
方法的请求包装器。