如何检查会话是否超时?

问题描述

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

解决方法

确实没有可靠的方法可以检测到这一点。您可以在所有链接/表单中摆弄一些基于会话的令牌作为请求参数,并在过滤器中对其进行验证,但这是完全可欺骗的,并且对SEO并不友好。 最好的办法是在主模板的“ 2”中添加一个“ 1”标签,该标签将在会话过期时自动将页面重定向到会话超时错误页面。由于您使用的是共享错误页面,因此可以将条件作为请求参数传递:
<meta http-equiv=\"refresh\" content=\"${pageContext.session.maxInactiveInterval};url=error.jsp?type=timeout\" />
并在ѭ4中进行检查,如下所示:
<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}
只是不必要的弯路。查看ѭ8javadoc中所有可用的getter。     ,我认为这不会按您想要的方式工作。尝试$ {pageContext.request.session.new} 如果您未在<%@ page session = \“ false \”%>标记中指定,我认为它不会创建新的会话,因此您的第一个代码/ might /可以正常工作,但我会强调检查方式我在上面指出了。 .isNew()在HttpSession上定义     ,request.getSession()将始终返回会话,因此您的方法将不起作用。如果您的要求不是创建会话,则该会话不存在时,请使用自定义标记。 如果要在不存在的会话中创建会话,并且想知道请求是否正在加入会话/正在创建新会话。使用$ {pageContext.request.session.new}。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...