处理会话超时的最佳方法是什么?

时间:2013-08-02 15:12:19

标签: javascript hibernate jsp tomcat7 bonecp

我正在处理JSP-Web-Application并在会话到期时遇到麻烦。 放置在web.xml中,超时是在30分钟后定义的。但是我希望在用户保持窗口打开的时候保持会话处于活动状态。 我首先想到的是一个简单的AJAX-Component,它每隔10分钟对服务器说“你好”,并且可能会向数据库发送一个简单的测试语句(例如“Select 1”)。

但有两件事让我对此表示怀疑:

  1. 如果我将一个简单的setTimeout(sayHi(),600)置于无尽的时间 - JS循环中这是一个有效且明智的决定吗?
  2. 这个概念甚至是个好主意吗?
  3. 系统的所有用户共享与数据库的公共池化BoneCP连接,以从数据库执行简短查询。还有几个数据行通过Hibernate获取。 Hibernate-part是整个应用程序中最容易出错的部分,在超时之后,这些集合也需要重新加载。有没有办法让Hibernate-Session保持活跃状态​​?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我只能说出超时问题。无休止的while-JS循环不起作用,因为浏览器中的javascript在单个线程中运行,循环将阻止所有其他活动,有效地冻结您的页面。

setInterval对象的window方法将按您定义的时间间隔定期执行操作(半)

setInterval(sayHi, 600000)

将导致sayHi在10分钟(600000毫秒)后尽快运行。但在此期间将允许其他操作。

(另请注意,我从sayHi中删除了括号.shownHi()将立即解决,这不是您想要的。)