我为我们公司的用户构建了一个内部应用程序。用户不活动后没有超时,我们也不想要超时。用户抱怨说,在一段时间(比如30分钟)不使用后,如果再次使用,web应用程序就会开始表现得很奇怪。按钮不工作,组合框不会下拉,日期选择器坏了。很明显,在用户不活动一段时间后,Javascript将被禁用。
有人遇到过这种行为吗?如果有,我该如何预防?
web应用程序是一个ASP。. NET MVC 3.0应用程序,使用Telerik MVC扩展,其中包括编写一些客户端Ajax。
检查脚本是否设置了TTL值为30分钟的cookie。
我认为这与会话超时有关。由于用户丢失了自己的会话值,服务器将不接受ajax与服务器的集成,反过来用户认为站点停止工作。根据描述,如果站点在30分钟后停止工作,并且用户使用刷新按钮完全重新加载页面,则由于会话值丢失,用户将不得不再次重新登录。
有几种解决方法。
你必须创建一个隐藏的iframe,它每10分钟重新加载一次
或
延长会话超时时间超过30分钟(1800秒)
或
定期向服务器发送ajax请求以保持连接
这可能是错的-但有时存在内存泄漏,这可能导致这种行为。我在使用gmail时遇到了这个问题。在后台运行的脚本可以做到这一点。当发生这种情况时,您能确定浏览器使用了多少内存吗?
首先,我尝试在给定的时间间隔内触发一个事件,看看javascript是否真的开始滞后,或者如果它是会话超时,如其他人所建议的。
将此函数添加到文档正文的某个位置:
window.onload = function() {
setInterval(messageLogger, 15000);
};
function messageLogger() {
var now = new Date();
console.log(now.getMinutes()); //Or now.getTime() or whatever makes the most sense to you
}
打开您的控制台,并在页面处于非活动状态一段时间后对其进行监控。如果它继续无限期地每15秒触发一次,javascript没有被禁用,也不可能是javascript代码的问题。在这一点上,我开始研究这是否可能是一个会话问题。如果你注意到日志消息开始延迟(或停止),你有一个内存泄漏在你的javascript某处。
Javascript没有停止运行;您的会话在某处超时了。您网站的动态组件在向服务器请求时失败,因为它们的会话cookie不再有效;您需要找到会话最初设置的位置,并增加会话过期时间。
等一下。我只是让这些用户在我的开发服务器上进行测试。他们根本没有这个问题。我在我的开发服务器上发现了不同之处。我们在考虑是否需要客户证书。我们将IIS中的客户端证书设置为"接受客户端证书"。这导致了很多奇怪的客户端行为,这取决于浏览器,操作系统的组合。将此设置为"忽略客户端证书",似乎已经完全消除了这个问题。