java / GWT web app:如何在Session Timeout上获得回调

时间:2010-10-19 16:53:28

标签: java session tomcat gwt session-timeout

我们有一个部署在Tomcat上的GWT应用程序。在服务器上,我们设置了超时1分钟

httpSession.setMaxInactiveInterval(1*60) 

在客户端,我们设置了一些超时值为1分钟的cookie。 1分钟后,我们注意到客户端cookie被删除;但是,servlet容器(jetty / tomcat)设置的JSESSIONID仍然存在于客户端中。

在会话超时时,我们的用户希望我们抛出警报/消息对话框,提醒他/她会话超时,用户应该再次登录服务器。看来我们需要一个关于超时的客户端回调 - 我们可以调用一个API来设置Session Timeout的回调吗?

截至目前,如果用户使用过期会话点击服务器,我们会告诉他会话已过期;但是,客户希望我们通过提醒用户会话已超时(不浪费时间编辑任何客户端数据,然后提交以发现会话已超时)来防止“丢失更改” - 丢失更改!)

处理这种情况的其他方法有哪些?

谢谢,

3 个答案:

答案 0 :(得分:3)

我们已经完成了我们的GWT应用程序,其中会话到期前警告用户

  • 我们有每个客户端请求通过LoggingAsyncHandler(我们用它扩展每个异步调用)
  • 在LoggingAysyncHandler中,我们设置了计时器(来自GWT的一个Timer类),这比会话超时少,所以如果没有活动,那么我们会向客户端弹出一条消息:“你想继续吗”如果他们按下确定我们重置计时器并对服务器进行虚拟调用,这也会重置会话时间。

希望它有所帮助!

答案 1 :(得分:1)

要从服务器发送数据,您可以使用HTML5 Web Sockets或旧浏览器,某种形式的Comet

或者,您可以让GWT客户端定期向服务器发送ping以检查会话是否仍然可用,但这会导致大量不必要的HTTP请求,效率会降低。

答案 2 :(得分:-2)

如果您的应用程序有web.xml文件,请将其添加到webapp部分

<session-config>
     <session-timeout>30</session-timeout>
</session-config>

这是会话的服务器端超时(以分钟为单位)

*编辑 - 因为这个想法似乎与一些读者失去了。  如果用户尝试使用过期的会话命中服务器,则可以将其重定向到原始海报要求的登录页面。当cookie过期时,前端没有理由向服务器发送回调。如果用户未发送sessionID,则会转到登录屏幕。如果他们将会话ID发送到已过期的服务器,请将其发送到登录页面。弹出消息可以在前端处理