如何让用户知道他/她的会话已过期?

时间:2010-01-04 21:17:36

标签: servlets tomcat6

我已经设置Tomcat在15分钟不活动后处理会话。像这样的东西

<session-config>
    <session-timeout>15</session-timeout>
</session-config>

每当用户访问受限页面(需要用户登录的页面)时,我会检查会话以查看登录过程是否已完成。如果有,则授予访问权限,如果没有,则将用户重定向到登录页面,其中提示他/她具有有效的ID和密码。如果会话超时,则需要用户再次登录。这很好,但我想让用户知道他/她必须再次登录,因为会话已经超时。

我该怎么做呢?我找到了HttpSessionListener接口,并认为它可能会有所帮助,但session会在会话失效之前调用sessionDestroyed方法,因此设置参数没有好处,正如预期的那样。

3 个答案:

答案 0 :(得分:2)

当您将用户重定向到登录表单时,请设置一个请求参数,url参数或cookie,指示会话已过期(如果您使用cookie,则在显示登录表单后删除cookie)。然后,在显示表单时,检查会话过期指示符并显示相应的消息。

答案 1 :(得分:2)

登录时,设置一个长期生存的cookie(1天?),在正常注销期间删除(将年龄设置为0)。如果您在用户未登录时再次登陆登录页面且cookie仍然存在,则表示会话已过期。

<c:if test="${empty user && not empty cookie.user}">
    You were logged out because the session was expired.
</c:if>

答案 2 :(得分:2)

您可以通过以下方式检查会话是否已过期和/或超时:

if (request.getRequestedSessionId() != null
        && !request.isRequestedSessionIdValid()) {
    // Session is expired
}

使用getRequestedSessionId区分新会话和现有(有效/已过期)会话,并使用isRequestedSessionIdValid区分有效会话和新会话/已过期会话。

您可以将此代码放在Filter