Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsp 如何检查会话是否超时?_Jsp_Jstl_El - Fatal编程技术网

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>