Jsp 如何检查会话是否超时?
如何在错误页中检查会话是否超时 我试过了Jsp 如何检查会话是否超时?,jsp,jstl,el,Jsp,Jstl,El,如何在错误页中检查会话是否超时 我试过了 <c:choose> <c:when test="${empty pageContext.request.session}"> //do smth </c:when> <c:otherwise> //do smth </c:otherwise> </c:choose> //做smth //做smth 但是它不起作用
<c:choose>
<c:when test="${empty pageContext.request.session}">
//do smth
</c:when>
<c:otherwise>
//do smth
</c:otherwise>
</c:choose>
//做smth
//做smth
但是它不起作用。我认为这不会按你想要的方式起作用。请尝试${pageContext.request.session.new} 如果您没有在标记中指定,我认为它不会创建一个新会话,因此您的第一个代码/可能/工作,但我会强调以我上面指出的方式进行检查 .isNew()是在HttpSession请求上定义的。getSession()将始终返回会话,因此您的方法将不起作用。如果您的要求不是创建会话,则在不存在会话时,使用自定义标记
如果希望在会话不存在时创建会话,并且希望知道请求是否正在加入会话/创建新会话。使用${pageContext.request.session.new}。确实没有可靠的方法来检测它。您可以在所有链接/表单中使用一些基于会话的令牌作为请求参数,并在过滤器中对其进行验证,但这完全是捏造的,不利于SEO 您所能做的最好的事情是在主模板的
中添加一个
标记,每当会话过期时,该标记会自动将页面重定向到会话超时错误页面。由于您使用的是共享错误页,因此可以将条件作为请求参数传递:
<meta http-equiv="refresh" content="${pageContext.session.maxInactiveInterval};url=error.jsp?type=timeout" />
哦,是的,
${pageContext.session}
合法有效。${pageContext.request.session}
只是一个不必要的迂回。检查所有可用的getter。它既不适用于session=“false”也不适用于session.new。实际上,我希望用户在一段时间后浏览链接时看到有关session已超时的消息。但我也使用此页面通知用户他们无法访问某些资源(我将从筛选器重定向到此页面)。因此,我使用这种构造来检查会话超时,以给出不同的消息
<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>