我们有一个部署在Tomcat上的GWT应用程序。在服务器上,我们设置了超时1分钟
httpSession.setMaxInactiveInterval(1*60)
在客户端,我们设置了一些超时值为1分钟的cookie。 1分钟后,我们注意到客户端cookie被删除;但是,servlet容器(jetty / tomcat)设置的JSESSIONID仍然存在于客户端中。
在会话超时时,我们的用户希望我们抛出警报/消息对话框,提醒他/她会话超时,用户应该再次登录服务器。看来我们需要一个关于超时的客户端回调 - 我们可以调用一个API来设置Session Timeout的回调吗?
截至目前,如果用户使用过期会话点击服务器,我们会告诉他会话已过期;但是,客户希望我们通过提醒用户会话已超时(不浪费时间编辑任何客户端数据,然后提交以发现会话已超时)来防止“丢失更改” - 丢失更改!)
处理这种情况的其他方法有哪些?
谢谢,
答案 0 :(得分:3)
我们已经完成了我们的GWT应用程序,其中会话到期前警告用户
希望它有所帮助!
答案 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发送到已过期的服务器,请将其发送到登录页面。弹出消息可以在前端处理