2010-11-08 44 views

回答

1

您不需要手动执行此操作。 servletcontainer将为你做。您可以通过HttpServletRequest#getSession()访问跟踪的会话。您只需将登录用户设置为会话属性即可。

request.getSession().setAttribute("user", user); 

让其余的代码拦截。您通常使用Filter

if (request.getSession().getAttribute("user") == null) { 
    // Not logged in. Redirect to login page. 
    response.sendRedirect("login.jsp"); 
} else { 
    // Logged in. Just continue request. 
    chain.doFilter(request, response); 
} 

当您调用注销时,只需从会话中删除用户。

request.getSession().removeAttribute("user"); 

servletcontainer也会管理会话过期。当它到期时,HttpSession将被简单地删除,包括它的所有属性。

至于后退按钮的问题,只是指示客户端不缓存响应,以便它被迫启动一个全新的请求,然后通过Filter。这个客户端指令需要通过相应地设置响应头来进行。这也可以在Filter中完成。

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1. 
response.setHeader("Pragma", "no-cache"); // HTTP 1.0. 
response.setDateHeader("Expires", 0); // Proxies. 
0

首先,会话创建和销毁:

使用HttpSessionListener

执行sessionCreated(HttpSessionEvent se)带有输出,告诉您已创建会话。

执行sessionDestroyed(HttpSessionEvent se)带有输出,告诉您会话已被销毁。也就是说,用户已注销,或者用户的会话已过期。

现在,中间部分。对于该过滤器,使用filter,对应的web.xml条目为*.jsp。在过滤器内部,使用doFilter(ServletRequest request, ServletResponse response, FilterChain chain)。将ServletRequest转换为HttpServletRequest。使用该请求,您可以使用许多方法来进行会话跟踪。用户的凭据,访问URL,基本上所有可能感兴趣的内容。