如何在错误页面中检查会话是否超时?
我试过了
<c:choose>
<c:when test="${empty pageContext.request.session}">
//do smth
</c:when>
<c:otherwise>
//do smth
</c:otherwise>
</c:choose>
但它不起作用。
答案 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}。