2

我为我们公司的用户构建了一个内部应用程序。用户不活动后没有超时,我们也不想要。用户抱怨说,在一段时间(如 30 分钟)不活动后,如果再次开始使用 Web 应用程序,它就会开始表现得很奇怪。按钮不起作用,组合框不会下拉,日期选择器坏了。我似乎很清楚,在用户不活动一段时间后,Javascript 被禁用了。

有没有人遇到过这种行为,如果有,我该如何预防?

Web 应用程序是一个 ASP.NET MVC 3.0 应用程序,使用 Telerik MVC 扩展,其中包括编写一些客户端 Ajax。它在 Windows Server 2003 标准版的 IIS 6.0 上运行。

4

6 回答 6

1

检查脚本是否设置了任何具有约 30 分钟 TTL 值的 cookie。

于 2011-07-08T21:04:09.463 回答
1

我认为这与会话超时有关。由于用户丢失了自己的会话值,服务器将不接受与服务器的 ajax 集成,作为回报,用户认为该站点停止工作。根据描述,如果站点在 30 分钟后停止工作,并且用户使用刷新按钮完全重新加载页面,用户将不得不再次重新登录,因为会话值丢失。

有几种解决方案。

您必须创建一个隐藏的 iframe,它每 10 分钟重新加载一次

或者

延长会话超时时间超过 30 分钟(1800 秒)

或者

定期向服务器发送 ajax 请求以保持连接。

于 2011-07-08T21:05:43.517 回答
0

这可能是离谱的,但有时会出现内存泄漏,这可能会导致这种行为。我在gmail遇到了这个问题。在后台运行的脚本可以做到这一点。你能确定发生这种情况时浏览器使用了多少内存吗?

于 2011-07-08T21:07:21.603 回答
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 中某处存在内存泄漏。

于 2011-07-08T21:28:30.790 回答
0

Javascript 没有停止运行;您的会话在某处超时。您站点的动态组件无法向服务器发出请求,因为它们的会话 cookie 不再有效;您需要找到最初设置会话的位置,并增加会话到期时间。

于 2011-07-08T21:50:33.493 回答
0

等一下。我刚刚让这些用户使用我的开发服务器对此进行了测试。他们根本没有这个问题。我发现我的开发服务器上有什么不同。我们在玩弄要求客户证书。我们将 IIS 中的客户端证书设置设置为“接受客户端证书”。这导致了很多奇怪的客户端行为,它取决于浏览器、操作系统组合。将其设置回“忽略客户端证书”,似乎完全消除了这个问题。

于 2011-09-22T23:34:00.787 回答