Java 获取会话将过期的时间(秒)

Java 获取会话将过期的时间(秒),java,ajax,web-applications,struts,Java,Ajax,Web Applications,Struts,我正在构建一个web应用程序,它有一个顶部薄型框架,该框架应以秒为单位显示servlet会话超时的时间 问题在于,对servlet的AJAX调用返回最后一次访问时间,而inactiveInterval本身会更新会话 那么,有没有一种方法可以通过一个不增加lastAccessedTime的servlet来获取关于会话的信息呢 感谢论文中的,您不应该将会话到期时间中继到会话时间本身,在您的情况下,应该通过减少当前时间的登录时间来实现计数器 RemainingTime = CurrentTime

我正在构建一个web应用程序,它有一个顶部薄型框架,该框架应以秒为单位显示servlet会话超时的时间

问题在于,对servlet的AJAX调用返回最后一次访问时间,而inactiveInterval本身会更新会话

那么,有没有一种方法可以通过一个不增加lastAccessedTime的servlet来获取关于会话的信息呢


感谢论文中的,您不应该将会话到期时间中继到会话时间本身,在您的情况下,应该通过减少当前时间的登录时间来实现计数器

   RemainingTime = CurrentTime - LoginTime
ajax调用应该查询这个变量。
希望这能解决您的问题。

我能问一下更多的细节吗

真正的要求是什么?会话是否在用户登录后x秒内超时

在这种情况下,可以对HTTPSession对象使用getCreationTime()方法

是否要求会话在x秒不活动后超时?如果是这样,那么做一个

remainingTimeInMilliseconds = System.currentTimeMillis - session.getLastAccessedTime()

您的顶部框架不需要向服务器询问最后一次访问时间。为什么不让每个HTML页面都包含一个JavaScript片段,它将定义的变量设置为上次访问,或者更方便的是,将变量设置为HTTP会话的假定过期日期。根据生成网页的方式,您可以将代码片段添加到默认模板中,或者甚至可以添加过滤器,该过滤器将在每个HTML页面上嵌入所需的代码


但是请注意,IMHO(servlet规范)只声明,服务器可能在过期时间过后的某个时间点使会话无效,因此在过期时间之后访问会话不一定会失败。

似乎没有人真正回答这个问题。最后一个响应与另一个请求所需的信息最接近,也可能是最好的。我想补充一点,如果您可以依赖XHR活动,那么您可以使用所需的值设置响应头

假设您确实希望请求一个参与会话但不更新上次访问时间的servlet(汇总/重述),那么您应该能够通过一个过滤器来实现这一点,该过滤器链接一个被覆盖的HttpServletResponse,该响应返回一个被覆盖的会话对象(覆盖getLastAccessedTime()方法(当然,在实际会话中存储为属性)。它可能需要对实际会话执行自己的手动失效

像这样的问题显示了Servlet规范的时代,即使是最新的形式,对一些低级身份验证机制也没有足够的控制,即使使用过滤器,重写也很困难。这些限制通过使用AJAX等技术表现出来。

我不认为这是剩余的时间,很可能是“登录后经过的时间”?
remainingTimeInMilliseconds = System.currentTimeMillis - session.getLastAccessedTime()