这个问题可以通过谷歌搜索解决,我也是如此,但由于我是servlet技术的新手,我无法解决这个问题。
我需要为特定用户分配会话,会话将在10秒后过期,当会话过期时,用户将再次转发到login.html页面。
我读了一下它,但是当会话到期时我没有得到回调。 这是我的尝试。
Login servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("user_id");
String pwd = request.getParameter("pwd");
PrintWriter out = response.getWriter();
if(userName.equalsIgnoreCase(pwd)){
HttpSession session = request.getSession();
session.setMaxInactiveInterval(10);
ActiveUser mActiveUser = new ActiveUser();
mActiveUser.setUserName(userName);
session.setAttribute("userName", mActiveUser);
RequestDispatcher rd = request.getRequestDispatcher("welcome.html");
rd.forward(request, response);
}else{
response.setContentType("text/html");
out.print("UserName and password did not match, Please try again");
RequestDispatcher dispatchToIndex = request.getRequestDispatcher("index.html");
dispatchToIndex.include(request, response);
}
}
ActiveUser.java
@WebListener
public class ActiveUser implements HttpSessionBindingListener,
HttpSessionListener {
//overridden methods of the interfaces are included, and simple print statement is there to get know about callback is received or not.
问题:当会话在10秒后到期(超时)时,我没有按要求收到回叫,但如果我在10秒后发送请求,它会正确地知道前一个会话已过期并且我在{ {1}}
提前致谢
答案 0 :(得分:1)
到期后,会话不会立即销毁。会话破坏会在一定时间间隔内发生。
sessionDestroyed()
将被调用。 答案 1 :(得分:1)
会话检查肯定会以超过10秒(HttpSessionListener not detecting session timeout)的间隔进行。如果等待一段时间,将调用sessionDestroyed
方法。
但是,如果请求不首先发生,则不会发生自动重定向。因此,当用户尝试访问您的Web应用程序时,就会发生这种情况。在这种情况下,您不需要WebListener
(例如javax.servlet.http.HttpSessionListener),您只需检查是否在会话中设置了用户名或身份验证标志。
如果你真的想要一个自动重定向,你可以通过js轮询或服务器推送实现它。