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

时间:2016-03-27 21:01:57

标签: session redirect servlets servlet-filters

如果用户处于非活动状态10分钟并将用户重定向到页面sessionlocked.jsp,我想编程我的servlet来阻止会话而不关闭会话。

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

session.setMaxInactiveInterval(10*60);
if (request.getSession(false) == null) {
    response.sendRedirect(url);
}

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:-1)

作为documentation;

  

setMaxInactiveInterval(int interval)

     

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

因此setMaxInactiveInterval方法无法满足您的需求,会使会话无效。

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

首先;

  

使用过滤器检查会话时间以及时间是否过度重定向到   锁定页面,否则重置时间。

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");
    }
}

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

  

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

 window.onload = function() {
        setInterval(function() {
            window.location.replace("/sessionlocked.jsp");
              }, 600000);
    }

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

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
    }
}

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