如何检查会话是否超时?

时间:2011-05-24 23:10:00

标签: jsp jstl el

如何在错误页面中检查会话是否超时?

我试过了

<c:choose>
    <c:when test="${empty pageContext.request.session}">
        //do smth
    </c:when>
    <c:otherwise>
        //do smth
    </c:otherwise>
</c:choose>

但它不起作用。

3 个答案:

答案 0 :(得分:2)

确实没有可靠方法来检测它。您可以在所有链接/表单中使用一些基于会话的令牌作为请求参数,并在过滤器中验证它,但这完全可以欺骗,而不是真正的SEO友好。

您可以做的最好的事情是向主模板的<meta http-equiv="refresh">添加<head>标记,无论何时会话,都会自动将页面重定向到会话超时错误页面 已过期。由于您使用的是共享错误页面,因此可以将条件作为请求参数传递:

<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=error.jsp?type=timeout" />

并在error.jsp中查看,如下所示:

<c:choose>
    <c:when test="${param.type == 'timeout'}">
        <p>Your session has been timed out.</p>
    </c:when>
    <c:otherwise>
        <!-- Handle default case here. -->
    </c:otherwise>
</c:choose>

哦,是的,${pageContext.session}合法有效。 ${pageContext.request.session}只是一个不必要的绕道而行。检查所有可用的getter PageContext javadoc

答案 1 :(得分:0)

我认为这不会按你想要的方式运作。试试$ {pageContext.request.session.new}

如果您未在&lt;%@ page session =“false”%&gt;中指定标签我不认为它会创建一个新的会话,所以你的第一个代码/可能/工作,但我会强调以我上面指出的方式检查。

.isNew()在HttpSession上定义

答案 2 :(得分:0)

request.getSession()将始终返回会话,因此您的方法将无效。如果您的要求不是创建会话,则何时不存在,请使用自定义标记。

如果要在不存在的情况下创建会话,并且您想知道该请求是否正在加入会话/创建新会话。使用$ {pageContext.request.session.new}。