如何检查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 } 

两者都有效,但不是百分之百,你知道,因为即使应用程序首次启动,它仍然会显示“会话已过期”。 为什么? 谢谢您的帮助。