使用AJAX自动刷新在Web应用程序上超时会话的方法

我正在编写一个Web应用程序,它以设定的间隔使用AJAX调用自动刷新数据。

因为它正在这样做,所以服务器端用户会话永远不会超时,因为每次ajax调用都会刷新最后一个活动。

是否有良好的客户端规则我可以​​实现超时用户? 即我应该在浏览器中跟踪鼠标移动等,还是应该将AJAX调用指向不刷新会话的URL?

我喜欢我的AJAX调用点击启用会话的URL,因为我还可以validation用户是否已登录等。

关于我是否应该打扰用户超时的任何想法?

我使用过的一种技术:每次调用时增加AJAX调用之间的间隔。 因此,您在10秒后进行第一次AJAX通话,然后等待11秒,然后是13,然后是16,20,25等……(或类似的模式)。 每次有页面活动(通过注册一些JS事件找到),您将间隔重置回起始值(例如10秒)。

当AJAX间隔变得超过超时时间时,此技术将导致最终未触摸浏览器的用户最终超时。 作为一个额外的好处,你将引导你的服务器负载 – 如果用户长时间打开浏览器窗口,他们会在超时前做出越来越少的请求。

我提示用户在一段时间不活动后通过JavaScriptvalidation它们是否仍处于活动状态。 不活动被定义为“没有发送到窗口的鼠标或关键消息”。 如果他们在一段时间后未能响应提示,我会重定向到退出页面。

我可以在这里找到基于jQuery UI的实现。

我通过在浏览器中维护“最后一个操作”时间戳并使用心跳将其发送回服务器来完成此操作。 然后,在服务器上,我根据此值与当前时间之间的差异检查超时,如果用户空闲时间太长,则调用注销例程。 如果会话超时,则心跳结果将触发浏览器重新加载页面,当会话现在在服务器上注销时,将清除任何用户特定信息。

我必须用这种方法解决的两个主要问题是对服务器和客户端日期函数实现中的时区的不同解释,并且如果用户在同一浏览器中打开了几个选项卡,发送不同的“最后操作”时间戳,则跟踪最近的操作回到服务器。