我在我的项目中使用了jsp技术。我想进行会话跟踪 在我的登录表单中。 注销后我按下后退按钮应显示 会话已过期。请帮助我。
答案 0 :(得分: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.
答案 1 :(得分:0)
首先,会话创建和销毁:
使用输出实现sessionCreated(HttpSessionEvent se)
,告诉您已创建会话。
使用输出实现sessionDestroyed(HttpSessionEvent se)
,告诉您会话已被销毁。也就是说,用户已注销,或用户的会话已过期。
现在,中间部分。对web.xml
使用*.jsp
条目,doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
条目为该过滤条件。在过滤器内部,使用ServletRequest
。将HttpServletRequest
投射到{{1}}。使用该请求,您将拥有许多可用于会话跟踪的方法。用户的凭据,访问URL,基本上所有可能感兴趣的内容。