会话超时未发生

时间:2014-04-18 07:10:07

标签: java session servlets web.xml

识别会话超时并重定向的步骤是什么,我试过在web.xml中给会话超时1分钟,是否会使会话进入时间?

用于在过滤器中重定向:

if (request.getRequestedSessionId() != null   && !request.isRequestedSessionIdValid()) 
        response.sendRedirect(request.getContextPath() + "/login.html");
                    return;
    }
    else {
        response.setHeader("Cache-Control", "no-cache, no-store, must-       revalidate"); // HTTP 1.1.
        response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
        response.setDateHeader("Expires", 0);
        filterChain.doFilter(servletRequest, servletResponse);
    }  

但它没有重定向到登录页面,我在这里缺少什么?

需要做的另一个澄清是:web.xml中的url-pattern标签是否应该具有重定向页面地址?

<filter-mapping>
    <filter-name>SessionTimeoutCookieFilter</filter-name>
    <url-pattern>login.html</url-pattern>
</filter-mapping>

对此有任何建议......

3 个答案:

答案 0 :(得分:1)

如果您使用web.xml

,请在Apache Tomcat中尝试此操作
         <session-config>
            <session-timeout>30</session-timeout>
        </session-config>

答案 1 :(得分:1)

非常简单。
将以下代码添加到 SessionTimeoutCookieFilter

    HttpSession session = request.getSession(false);
        if (null == session) {
            response.sendRedirect("index.jsp");
        }

并且还改变你的网址,就像我使用过的那样: -

<filter>
<filter-name>SessionFilter</filter-name>
 <filter-class>
    net.SessionFilter
</filter-class>
<init-param>
    <param-name>avoid-urls</param-name>
    <param-value>index.jsp</param-value>
</init-param>
</filter>
<filter-mapping>
 <filter-name>SessionFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>

答案 2 :(得分:0)

<session-config>
    <session-timeout>15</session-timeout>
</session-config>

或者您可以使用Java代码:

session.setMaxInactiveInterval(15 * 60); //15 minutes

HttpSession#setMaxInactiveInterval()顺便说一下,这里的变化并不大。它与<session-timeout>中的web.xml完全相同,唯一的区别是您可以在runtime期间以编程方式更改/设置它。顺便说一下,更改只影响当前会话实例,而不是全局(否则它将是static方法)。

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

您可以使用会话永不过期的-1。因为您不知道线程需要多长时间才能完成。