java - session 超时回调

标签 java session servlets

这个问题可以通过谷歌搜索来解决,我也是,但是由于我是servlet技术的新手,所以我无法解决这个问题。

我需要将 session 分配给特定用户, session 将在 10 秒后过期,当 session 过期时,用户将再次转发到 login.html 页面。

我读了一些相关内容,但当 session 过期时我没有收到回调。 这是我的尝试。

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.

问题:当 session 在 10 秒后过期(超时)时,我没有按要求收到回调,但如果我在 10 秒后发送请求,它会正确地知道上一个 session 已过期,并且我在 ActiveUser->sessionDestroyed() 和 ActiveUser->valueUnbound() 和 HttpSessionAttributeListener->attributeRemoved()

提前致谢

最佳答案

session 检查的时间间隔肯定可能超过 10 秒 ( HttpSessionListener not detecting session timeout )。如果您等待一段时间,sessionDestroyed 方法将被调用。

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

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

关于java - session 超时回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20471694/

相关文章:

mysql - MySQL中如何控制 session 并发?

java - 我的 jsp 文件找不到我的 javascript 文件

java - 使用 XML 的 Servlet

java - 如何在 iOS 上使用 appium 查找应用程序版本

JavaFX 多边形平移、旋转、缩放及其点

php - settype 改变 session 变量的值

php - Symfony2 使用 session 键和值创建对象

java - 拦截 LDAP 以收集统计信息

java - 在 JNI 和 C 中释放持久数组

java - 从 Maven 资源文件夹获取正确的文件路径 - iText