Java 会话超时时回调

Java 会话超时时回调,java,session,servlets,Java,Session,Servlets,这个问题可以通过谷歌来解决,我也是,但由于我对servlet技术不熟悉,所以无法解决这个问题 我需要将会话分配给特定的用户,会话将在10秒内过期,当会话过期时,用户将再次转发到login.html页面 我读了一些关于它的文章,但是当会话到期时,我没有收到回调。 这是我的尝试 Login servlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletE

这个问题可以通过谷歌来解决,我也是,但由于我对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秒后发送请求,它会正确地知道上一个会话已过期,我在
ActiveUser->sessionDestroyed()和
ActiveUser->valueUnbound()和HttpSessionAttributeListener->attributeRemoved()


提前感谢

过期后,会话不会立即销毁。会话销毁以一定的间隔缓慢地进行

  • 延迟:当新请求到达已过期的会话时,将调用
    sessionDestroyed()
  • 在某些时间间隔:服务器运行低优先级计时器作业以清除所有过期会话

会话检查的间隔肯定会超过10秒()。如果您再等一会儿,将调用
sessionDestroyed
方法

但是,如果请求没有首先发生,则不会发生自动重定向。因此,当用户尝试访问您的web应用程序时,可能会发生这种情况。在这种情况下,您不需要
WebListener
(例如javax.servlet.http.HttpSessionListener),只需检查会话中是否设置了用户名或身份验证标志


如果你真的想要自动重定向,你可以通过js轮询或服务器推送来实现。

有几次我在45-50秒后收到了回调。那么,这是否意味着每次会话超时应>1分钟minimum@GauravGupta看起来检查间隔大约在那个时间,这也取决于应用服务器。我想了很久了。谢谢你指出了根本原因。接受你的回答