为我的公司开发一个新的后端系统,他们的一个请求是锁定一个窗口,如果用户长时间闲置,则将其发送到登录屏幕。
我想我会通过将监听器附加到点击、鼠标移动和按键来使用 JavaScript 来做到这一点,但我担心会弄乱其他脚本。
有什么建议么?
为我的公司开发一个新的后端系统,他们的一个请求是锁定一个窗口,如果用户长时间闲置,则将其发送到登录屏幕。
我想我会通过将监听器附加到点击、鼠标移动和按键来使用 JavaScript 来做到这一点,但我担心会弄乱其他脚本。
有什么建议么?
如果用户在这么长时间后没有更改页面,您可以让它注销。这就是天使学习课件系统似乎要做的事情。
但是,您将面临的另一个问题是某些用户禁用了 JavaScript。
如果您可以将代码放在页面上,那么有两件事:
如果只能在服务器上放代码:
您可以一起使用元刷新和服务器技术。刷新后的页面会出现“您的会话即将到期,请点击此处返回并在 30 秒内继续工作”。
他们单击的按钮会重置您的服务器会话,并执行页面返回功能,因此他们拥有的任何数据(在大多数浏览器中)仍然存在。在刷新页面上需要 javascript,但在原始页面上不需要 - 只是元刷新。Javascript 活动跟踪将是最好的。
-亚当
在页面的加载事件中,您可以使用 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();
}
首先,要使其生效,您必须确保用户在此空闲时间结束时在服务器上注销。否则,您在客户端所做的任何事情都是无效的。如果您将他们发送到登录页面,他们只需单击后退按钮即可。
其次,执行此操作的常规方法是使用“元刷新”标签。将此添加到页面:
<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