用户一定时间不操作,系统判定超时后自动退出,监听用户操作

背景:之前做了一个功能用户用户一定时间不操作自动退出,是通过记录用户点击菜单的时间,和当前时间比对的,这样只能监控到菜单点击;多数情况用户是在填写表单,突然给退出了,用户反馈非常不友好,需要我们优化。

经过网上查阅资料发现可以通过js来监听用户的输入和鼠标移动,页面上来用定时器控制超时,超时后调注销登录方法,即可完美解决。

实现方式:在页面主框架里面加入监听代码,超时后调用注销方法即可。

代码如下:


<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UAT-8" />

<title>无标题文档</title>

 

<SCRIPT language="JavaScript">

var timerIdle=0;//定义空闲时间,单位秒
var timerBusy=0;//定义倒计时开始,单位秒
var timerIdle1=5;//定义超时时间,单位秒
var timerBusy1=10;//定义超时提醒后退出时间,单位秒

 
//初始化信息-这里只是为做示例,实际情况不用如此
function timerTimeout(){
    timerIdle++;
	if (timerIdle>timerIdle1){
		if (timerBusy==0){
			timerBusy=timerBusy1+1;
			//显示倒计时
			document.getElementById("timerUI").style.display="inline";   
		}
		
		timerBusy--;
		//显示倒计时效果
		document.getElementById("_timerBusy").innerHTML=timerBusy;
		//判定超时,停止计时
		if (timerBusy<=0){
			timerExit();
			return;
		}
	}else{
		timerBusy=0;
	}
	//计时器
	window.setTimeout("timerTimeout()",1000);
}

 
//隐藏div,这里只是为做示例,实际情况不用如此
function timerUser(){	
	timerIdle=0;
	document.getElementById("timerUI").style.display="none";
} 
//超时处理方法
function timerExit(){

	//超时处理.这里可以写注销登录方法
   alert("已经退出系统了~~");
   document.getElementById("outTimeDiv").style.display="inline";
   
   timerUser();
}

//启动计时器方法
window.setTimeout("timerTimeout()",1000);

/******************事件监听***************************/

function mouseMove(ev){
	ev= ev || window.event;
	timerUser();
	var mousePos = mouseCoords(ev);
} 

function mouseCoords(ev){

	if(ev.pageX || ev.pageY){
	   return {x:ev.pageX, y:ev.pageY};
	}

	return {
		 x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		 y:ev.clientY + document.body.scrollTop - document.body.clientTop
	};
}

document.onmousemove = mouseMove;
document.onkeydown = mouseMove;

</SCRIPT>

</head>

 

<body>
	<div>--------------------js监听用户操作超时后退出系统----------------------</div>
	<DIV ID="timerUI" style="position:absolute; left:30px; top:30px; font-size:20px;display:none">
		<table width="300" border="0" cellspacing="0" cellpadding="0">  
		  <tr>		   
			<td nowrap align="right" ID="_timerBusy" style=" font-size:36px; font-weight:bold; color:#FF0000;"></td>
			<td nowrap align="left">您长时间不没有操作,系统将 &nbsp;秒后将退出</td>
		  </tr>
		  <tr>
		   <td nowrap align="right"></td>
			<td nowrap align="right"></td>
			<td nowrap align="left">&nbsp;如继续操作点任意键即可</td>
		  </tr>	
		</table>
	</DIV>
	<div ID="outTimeDiv"  style="position:absolute; left:30px; top:30px; font-size:20px;display:none">&nbsp;系统检测到您长时间未进行任何操作,为保护您的信息安全已经自动退出</div>
</body>
</html>

示例效果图:

在layui框架中,实现用户登录后自动退出功能通常需要结合服务器端和前端的技术。一种常见的做法是在客户端设置一个定时器,当超过预设的时间(如15分钟)没有发送任何请求到服务器(比如通过轮询或者心跳包),可以认为用户已经超时操作。前端代码示例可能会像这样: ```javascript // 假设`loginInfo`存储了用户的登录状态 var loginInfo = localStorage.getItem('loginToken'); // 设置一个定时器 var timeoutId; setTimeout(function() { if (!loginInfo) { // 如果登录信息已过期 logout(); // 调用登出函数 } else { // 发送心跳请求到服务器检查登录状态 sendHeartbeat(); } }, DEFAULT_TIMEOUT_IN_MINUTES * 60 * 1000); // 每默认时间(例如15分钟)检查一次 function logout() { localStorage.removeItem('loginToken'); // 清除本地登录信息 window.location.href = '/logout'; // 跳转到登出页面 } function sendHeartbeat() { // 使用Ajax或其他方式向服务器发送请求 $.ajax({ url: '/checkLogin', type: 'GET', // 或POST data: { token: loginInfo }, success: function(response) { if (response.success) { // 登录有效,更新最后操作时间并继续计时 updateLastActivityTime(); } else { logout(); // 登录失效,强制登出 } }, error: function() { logout(); // 请求失败也视为登出 } }); } function updateLastActivityTime() { // 更新本地存储的最后活动时间 localStorage.setItem('lastActivityTime', new Date().getTime()); } ``` 记得在实际应用中,服务器端也需要处理心跳请求,并在一定时间内确认用户活动,如果长时间无响应则判定超时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值