我正在构建一个具有顶部精简框架的Web应用程序,该框架应显示servlet会话超时的秒数。
问题是对servlet的AJAX调用返回上次访问时间,而inactiveInterval本身更新会话。
那么有没有办法通过一个不增加lastAccessedTime的servlet获取会话信息?
由于
答案 0 :(得分:1)
似乎没有人真正回答问题。最后一个响应是最接近的 - 并且可能是最好的 - 捎带另一个请求所需的信息。我想补充一点,如果你可以指望XHR活动,你可以设置一个带有你想要的值的响应标题。
假设你真的想要 - 要求 - 总结/重述 - 一个参与会话但不更新上次访问时间的servlet,你应该能够通过一个链接覆盖重写HttpServletResponse的Filter实现这一点。返回一个重写的Session对象 - 用自己的方法覆盖getLastAccessedTime()方法(当然在真实会话中存储为属性)。它可能需要执行自己的手动失效的真实会话。
这样的问题显示了Servlet规范的时代,即使是最新的形式,也没有对某些低级认证机制进行足够的控制,即使使用过滤器,覆盖也很困难。这些限制表现为使用AJAX等技术。
答案 1 :(得分:0)
在论文中,你不应该在会话时间本身中转会话到期时间,在你的情况下,应该通过减少当前时间的登录时间来实现一个计数器。
RemainingTime = CurrentTime - LoginTime
您的ajax调用应查询此变量。 希望能解决你的问题。
答案 2 :(得分:0)
我可以要求更多细节吗?
真正的要求是什么?是否在用户登录的x秒内超出会话时间?
在这种情况下,您可以在HTTPSession对象上使用getCreationTime()方法
http://java.sun.com/javaee/5/docs/api/javax/servlet/http/HttpSession.html#getCreationTime%28%29
remainingTimeInMilliseconds = System.currentTimeMillis - session.getCreationTime()
OR
会话要求在x秒不活动后超时吗?如果是,那就做一个
remainingTimeInMilliseconds = System.currentTimeMillis - session.getLastAccessedTime()
答案 3 :(得分:0)
您的顶部框架无需向服务器询问上次访问时间。为什么不让每个HTML页面都包含一个JavaScript代码段,它将定义的变量设置为上次访问,或者更方便,将变量设置为HTTP会话的假定到期日期。根据您生成网页的方式,您可以将代码段添加到默认模板,甚至可以添加一个过滤器,它将在每个HTML页面上嵌入所需的代码。
请注意,恕我直言,servlet规范只表明服务器可能在到期时间过后的某个时刻使会话无效,因此在到期时间之后访问会话不是保证失败。