如何检查java中的会话已经过期?
有没有其他方法来检查除此之外的会话到期
session.isNew()
定义一个类,比如SessionTimeoutIndicator
,它实现了接口javax.servlet.http.HttpSessionBindingListener
。
接下来,创建一个SessionTimeoutIndicator
对象并将其添加到用户会话中。
删除会话后,Servlet引擎将调用SessionTimeoutIndicator.valueUnbound()
方法。
然后,您可以实现valueUnbound()
来执行所需的操作。
希望它现在已经清除。
是:
-
你可以调用
HttpServletRequest.getSession(false)
,如果没有一个活动,你将得到一个null
而不是一个会话。 -
您可以在
web.xml
定义生命周期监听器(使用HttpSessionListener
)。 通过这种方式,您可以在会话咬人的那一刻得到通知。
使用session.isNew
您无法将过期的会话与全新的会话区分开来。 您可以检查会话是否已过期和/或超时:
if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) { // Session is expired }
使用getRequestedSessionId
区分新的和现有的(有效/过期)会话,并使用isRequestedSessionIdValid
来区分有效和新的/过期的会话。
您可以将此代码放在filter中 。
我试过这个
HttpSessionListener.sessionDestroyed()
和这个
if (request.getRequestedSessionId() != null && !request.isRequestedSessionIdValid()) { // Session is expired }
两者都有效,但不是百分之百,你知道,因为即使应用程序首次启动,它仍然会显示“会话已过期”。 为什么? 谢谢您的帮助。