【问题标题】:Javascript disabled after a period of user inactivity用户不活动一段时间后禁用 Javascript
【发布时间】:2011-10-01 14:37:15
【问题描述】:

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

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

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

【问题讨论】:

  • 30 分钟 - 看起来像表单,会话超时?
  • 感谢大家的cmets。会话状态超时是问题所在。我把它增加到24小时。但是,这也是使用 XP 的用户的网络连接问题。我的站点遇到网络中断的 XP 用户发现他们无法单击按钮等(他们最终会因为无法保存而失去工作)。他们有笔记本电脑,他们去开会,停靠和取消停靠,把他们的笔记本电脑带回家等等。Windows 7 用户不会遇到这个问题,当他们重新连接时,一切正常。
  • 等一下。我刚刚让这些用户使用我的开发服务器对此进行了测试。他们根本没有这个问题。我发现我的开发服务器上有什么不同。我们在玩弄要求客户证书。我们将 IIS 中的客户端证书设置设置为“接受客户端证书”。这导致了很多奇怪的客户端行为,它取决于浏览器、操作系统组合。将其设置回“忽略客户端证书”,似乎完全消除了这个问题。我将不得不做更多的测试来确定。

标签: javascript ajax model-view-controller telerik user-inactivity


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    有几种解决方案。

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

    或者

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

    或者

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        首先,我会尝试在给定的时间间隔触发一个事件,以查看 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 某处存在内存泄漏。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2018-12-19
              • 2013-09-23
              • 2023-02-08
              • 1970-01-01
              • 2011-12-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多