0

为我的公司开发一个新的后端系统,他们的一个请求是锁定一个窗口,如果用户长时间闲置,则将其发送到登录屏幕。

我想我会通过将监听器附加到点击、鼠标移动和按键来使用 JavaScript 来做到这一点,但我担心会弄乱其他脚本。

有什么建议么?

4

4 回答 4

0

如果用户在这么长时间后没有更改页面,您可以让它注销。这就是天使学习课件系统似乎要做的事情。

但是,您将面临的另一个问题是某些用户禁用了 JavaScript。

于 2008-09-19T20:18:18.623 回答
0

如果您可以将代码放在页面上,那么有两件事:

  • 查找鼠标移动、键盘活动和滚动的 Javascript。
  • 在 html 中放置一个元刷新标签 - 如果他们在该页面上的时间超过 X 分钟,它将自动重定向到登录页面。

如果只能在服务器上放代码:

  • 保留一个会话(cookie 或其他)来跟踪页面更改之间的时间间隔。如果自上次请求以来请求页面的时间超过 X 分钟,则不提供请求的页面,提供登录页面。

您可以一起使用元刷新和服务器技术。刷新后的页面会出现“您的会话即将到期,请点击此处返回并在 30 秒内继续工作”。

他们单击的按钮会重置您的服务器会话,并执行页面返回功能,因此他们拥有的任何数据(在大多数浏览器中)仍然存在。在刷新页面上需要 javascript,但在原始页面上不需要 - 只是元刷新。Javascript 活动跟踪将是最好的。

-亚当

于 2008-09-19T20:24:27.920 回答
0

在页面的加载事件中,您可以使用 setTimeout 触发一个函数,警告用户如果他们不刷新页面,他们将被注销。

使用 5 分钟会话超时,您可以在 4 分钟后发出警告:

setTimeout(timeoutWarning, 240000);

function timeoutWarning() {
  if(confirm('You have been idle for a while.  Would you like to remain logged in?'))
    window.location.refresh();
}
于 2008-09-19T20:24:49.917 回答
0

首先,要使其生效,您必须确保用户在此空闲时间结束时在服务器上注销。否则,您在客户端所做的任何事情都是无效的。如果您将他们发送到登录页面,他们只需单击后退按钮即可。

其次,执行此操作的常规方法是使用“元刷新”标签。将此添加到页面:

<meta http-equiv="refresh" content="900;url=http://example.com/login"/>

将在 15 分钟(900 秒)后将它们发送到登录页面。即使他们在页面上做某事,这也会将他们发送到那里。它不检测活动。它只知道页面在浏览器中运行了多长时间。这通常已经足够好了,因为人们不需要 15 分钟来填写一个页面(我猜 stackoverflow.com 是一个明显的例外。)

如果您真的需要检测页面上的活动,那么我认为您的第一直觉是正确的。您将不得不为几件事添加事件处理程序。如果您担心为了验证或其他事情而弄乱其他脚本,您应该考虑以编程方式而不是内联方式添加事件处理程序。也就是说,而不是使用

<input type="text" onClick="doSomething;">

直接访问对象模型

Mozilla way:   element.addEventListener('click' ...)
Microsoft way: element.attachEvent('onclick' ...) 

然后确保在收到事件后传递事件,以便现有代码仍然执行它应该执行的任何操作(验证?)。

http://www.quirksmode.org/js/introevents.html有一篇关于如何做到这一点的文章。

--
bmb

于 2008-09-21T04:38:51.640 回答