如何检查以确保窗口正在被主动使用,如果没有提醒最终用户他们即将被注销?

时间:2008-09-19 20:13:57

标签: javascript session

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

我想通过将侦听器附加到点击,鼠标移动和键盘来实现JavaScript,但我担心会搞乱其他脚本。

有什么建议吗?

4 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

  • Javascript寻找鼠标移动,键盘活动和滚动。
  • 在html中添加元刷新标记 - 如果它们在该页面上超过X分钟,它将自动重定向到登录页面。

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

  • 保持跟踪页面更改之间的时间的会话(cookie或其他)。如果请求的页面长于上次请求后的X分钟,则不要提供请求的页面,请提供登录页面。

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

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

- 亚当

答案 2 :(得分: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();
}

答案 3 :(得分: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