我已经设置Tomcat在15分钟不活动后处理会话。像这样的东西
<session-config>
<session-timeout>15</session-timeout>
</session-config>
每当用户访问受限页面(需要用户登录的页面)时,我会检查会话以查看登录过程是否已完成。如果有,则授予访问权限,如果没有,则将用户重定向到登录页面,其中提示他/她具有有效的ID和密码。如果会话超时,则需要用户再次登录。这很好,但我想让用户知道他/她必须再次登录,因为会话已经超时。
我该怎么做呢?我找到了HttpSessionListener接口,并认为它可能会有所帮助,但session会在会话失效之前调用sessionDestroyed方法,因此设置参数没有好处,正如预期的那样。
答案 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。
中