我该如何检查以确保某个窗口正在被积极使用,如果没有警告最终用户,他们将要注销?

时间:2020-03-06 14:27:40  来源:igfitidea点击:

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

我想通过将侦听器添加到单击,鼠标移动和键盘输入上来使用JavaScript来实现此目的,但我担心会与其他脚本混淆。

有什么建议?

解决方案

如果用户在很长时间之后没有更改页面,则可以使它注销。这就是Angel Learning课件系统的功能。

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

如果我们可以在页面上放置代码,则有两件事:

  • 寻找鼠标移动,键盘活动和滚动的Javascript。
  • 在HTML中放置一个meta refresh标签-如果它们在该页面上停留X分钟以上,它将自动重定向到登录页面。

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

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

我们可以同时使用元刷新和服务器技术。刷新后的页面将转到"会话即将到期,请单击此处返回并在30秒内继续工作"。

他们单击的按钮将重置服务器的会话,并执行页面返回功能,因此(在大多数浏览器中)他们拥有的所有数据仍将存在。刷新页面上需要javascript,但原始页面上不需要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上有关于如何执行此操作的不错的文章。

--
胖子