Session 当用户在指定时间内处于非活动状态时,将用户重定向到特定页面

Session 当用户在指定时间内处于非活动状态时,将用户重定向到特定页面,session,redirect,servlets,servlet-filters,Session,Redirect,Servlets,Servlet Filters,我想对servlet进行编程,以便在用户10分钟不活动的情况下阻止会话而不关闭会话,并将用户重定向到页面sessionlocked.jsp 我测试了这段代码,但它不起作用 session.setMaxInactiveInterval(10*60); if (request.getSession(false) == null) { response.sendRedirect(url); } 我怎样才能做到这一点呢?As SetMaxInactivativeInterval(整数间隔) 指

我想对servlet进行编程,以便在用户10分钟不活动的情况下阻止会话而不关闭会话,并将用户重定向到页面
sessionlocked.jsp

我测试了这段代码,但它不起作用

session.setMaxInactiveInterval(10*60);
if (request.getSession(false) == null) {
    response.sendRedirect(url);
}
我怎样才能做到这一点呢?

As

SetMaxInactivativeInterval(整数间隔)

指定servlet容器使此会话无效之前,客户端请求之间的间隔时间(秒)。

因此,
setMaxInactiveInterval
方法不能满足您的需要,它会使会话无效

要向用户显示锁定的页面,您有两个选项

第一,

使用筛选器检查会话时间,如果时间已过,则重定向到 锁定页面,否则重置时间

第二个(除了第一个,因为第一次尝试是在服务器端控制的)

使用javascript倒计时,当时间结束时,将用户重定向到 锁定的页面

如果只需要servlet;(当用户与servlet交互时)

Servlet输出(锁定时间设置为10秒);

如果会话过期,则筛选尝试将不起作用(getSession()将为您提供一个新会话)。当客户端在同一会话中打开多个页面(选项卡/窗口)时,JS尝试会产生奇怪的结果。对于在服务器端会话过期时立即重定向用户的要求,两者都不是正确的方法。@BalusC我仍在编辑答案,猜测并在代码上方添加注释,我认为答案是不值得的-1分,这是一个不耐烦的动作:)答案以其当前形式完全错误。当然,如果这篇文章的更正方式能够真正回答并解决具体的需求,并且描述了提出解决方案而不是解决方案时所有可能的注意事项,那么否决票将被删除。我在几个场景中对它进行了测试,我希望它能像预期的那样帮助Ghanesoft。我希望使用servlet(服务器)配置它不使用javascript(客户端)
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpSession session = ((HttpServletRequest) request).getSession(false);
    if (session == null) {
        // ((HttpServletRequest) request).getSession(true);
        // redirect to logout or anywhere you want, to create a session
        return;
    }
    // Check if filter also work for sessionlocked.jsp
    if (((HttpServletRequest) request).getRequestURL().toString().contains("sessionlocked")) {
        chain.doFilter(request, response); // no need to check sessionlocked
        return;
    }
    long lastAccessTime = session.getLastAccessedTime();
    long tenMinuteAsMilisecond = 10 * 60 * 1000;
    if (lastAccessTime + tenMinuteAsMilisecond > (new Date()).getTime()) {
        chain.doFilter(request, response); // session still not locked
    } else {
        ((HttpServletResponse) response).sendRedirect("sessionlocked.jsp");
    }
}
 window.onload = function() {
        setInterval(function() {
            window.location.replace("/sessionlocked.jsp");
              }, 600000);
    }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession(false);
    if (session == null) {
        request.getSession(true);
        // redirect to logout or anywhere you want, to create a session
        return;
    }
    long lastAccessTime = session.getLastAccessedTime();
    long tenMinuteAsMilisecond = 10 * 1000;// to test lock time set to 10 seconds
    if (lastAccessTime + tenMinuteAsMilisecond > (new Date()).getTime()) {
        response.getOutputStream().print("Session not locked" + i++);
        // TODO for not locked code
    } else {
        response.getOutputStream().print("Session locked");
         //redirect to sessionlocked.jsp
    }
}