我为公司的用户构建了一个内部应用程序。用户不活动后也没有超时,我们也不需要。用户抱怨说,在一段时间(如30分钟)不活动后,如果开始再次使用它,Web应用程序就会开始变得奇怪。按钮不起作用,组合框不会下降,日期选择器坏了。我觉得很明显,在用户不活动一段时间后,Javascript就会被禁用。
有没有人遇到过这种行为,如果有,我该如何预防呢?
Web应用程序是一个ASP.NET MVC 3.0应用程序,使用Telerik MVC Extensions,其中包括编写一些客户端Ajax。它在Windows Server 2003 Standard Edition上的IIS 6.0上运行。
答案 0 :(得分:1)
检查脚本是否设置了具有~30分钟TTL值的任何cookie。
答案 1 :(得分:1)
我认为它与会话超时有关。由于用户丢失了自己的会话值,服务器将不接受与服务器的ajax集成,作为回报,用户认为该站点已停止工作。 根据描述,如果站点在30分钟后停止工作,并且用户使用刷新按钮完全重新加载页面,则用户将不得不重新登录,因为会话值丢失。
有几种解决方案。
您必须创建一个隐藏的iframe,每10分钟重新加载一次
或者
将会话超时时间延长超过30分钟(1800秒)
或者
定期向服务器发送ajax请求以保持连接。
答案 2 :(得分:0)
这可能是offbase-但有时会出现内存泄漏,从而导致此类行为。我用gmail遇到了这个问题。在后台运行的脚本可以做到这一点。你可以确定这种情况下浏览器使用了多少内存使用量?
答案 3 :(得分:0)
首先,我尝试以给定的间隔触发事件,以查看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中就会出现内存泄漏。
答案 4 :(得分:0)
Javascript没有停止运作;你的会话在某个地方超时。您的站点的动态组件对服务器的请求失败,因为它们的会话cookie不再有效;您需要找到最初设置会话的位置,并增加会话到期时间。
答案 5 :(得分:0)
等一下。我只是让这些用户使用我的开发服务器进行测试。他们完全没有这个问题。我发现我的开发服务器有什么区别。我们想要客户证书。我们将IIS中的“客户端证书”设置设置为“接受客户端证书”。这导致了很多奇怪的客户端行为,它依赖于更强大的操作系统组合。将其设置回“忽略客户端证书”,似乎完全消除了这个问题。