【前端】实现系统1分钟没动(无任何操作)则自动退出登录功能

news/2025/2/12 8:00:30/

实现系统1分钟没动(无任何操作)则自动退出登录功能

  • 一、方案原理:
  • 二、解决方案:
    • 方案一: 仅监测click动作
      • 1、实现代码:
      • 2、代码讲解:
    • 方案二、监测多种事件
      • 1、实现步骤:
      • 2、实现代码:
      • 3、代码讲解:
      • 4、注意事项:

一、方案原理:

可以借助 JavaScriptsetTimeout 方法来实现该功能。同时,为了避免用户在操作时,倒计时被重新计算,需要在页面上记录用户最后一次的操作时间。

二、解决方案:

方案一: 仅监测click动作

1、实现代码:

// 定义最大的闲置时间,例如为3分钟
const MAX_IDLE_TIME = 3 * 60 * 1000;// 记录用户最后一次操作的时间
let lastActionTime = new Date();// 定义一个函数,用于每次用户有行为时更新最后操作时间
function updateLastActionTime() {lastActionTime = new Date();
}// 定义一个计时器
let timeoutId = setTimeout(() => {console.log('用户已经很长时间没有操作了!');// 在这里可以添加登出等处理逻辑
}, MAX_IDLE_TIME);// 监听页面上任何一个元素的点击事件
document.addEventListener('click', () => {updateLastActionTime();clearTimeout(timeoutId);timeoutId = setTimeout(() => {console.log('用户已经很长时间没有操作了!');// 在这里可以添加登出等处理逻辑}, MAX_IDLE_TIME);
});

2、代码讲解:

上述代码使用了 JavaScript 的 setTimeout 方法和 clearTimeout 方法来实现相应的计时器功能。如果用户在相应时间内的操作,则会更新最后的操作时间,并重新启动计时器。如果用户在相应的时间内没有操作,则会执行相应的处理逻辑,例如执行退出登录等操作。该实现方案简单易懂,并且可以应用于多种不同的场景中。

方案二、监测多种事件

上面的代码只监听了 click 事件,一些没有点击行为的情况是检测不到的。如果需要检测其他事件,可以使用类似的方式监听其他事件以更新最后操作的时间戳。

1、实现步骤:

  1. 当用户登录成功时,记录当前的时间 startTime
  2. 通过监听用户的 mousemovemousedownkeydownclickscrolltouchstart等事件,每次检测到用户有操作时记录当前的时间 endTime
  3. 检测当前时间 endTime 与上次操作时间 lastTime 的时间差,如果大于设定的闲置时间 idleTime 则自动退出登录,否则更新上次操作时间为当前时间。
  4. 在页面跳转时或者退出登录时,清除定时器 timer

2、实现代码:

// 闲置时间间隔,以毫秒为单位
const idleTime = 60 * 1000;let startTime = new Date().getTime(),lastTime = startTime,timer;function startLogoutTimer() {clearTimeout(timer);timer = setTimeout(() => {console.log('长时间无操作,自动退出登录');// 在这里可以实现用户退出登录的操作}, idleTime);
}function stopLogoutTimer() {clearTimeout(timer);
}// 监听鼠标、键盘等事件
['mousemove', 'mousedown', 'keydown', 'scroll', 'touchstart'].forEach(eventName => {document.addEventListener(eventName, () => {lastTime = new Date().getTime();startLogoutTimer();});
});// 在页面卸载时,停止计时器
window.addEventListener('beforeunload', () => {stopLogoutTimer();
});

3、代码讲解:

上述代码中,首先定义了闲置时间间隔 idleTime。在用户登录成功后,记录当前的时间戳作为起始时间 startTime 和上次操作时间 lastTime。然后通过监听 mousemovekeydownclickscroll 等事件,每次检测到用户有操作时记录当前的时间戳,并启动定时器 timer 以检测用户是否处于闲置状态。

在定时器回调函数中,根据当前时间戳 lastTime 和上次操作时间 lastTime 的时间差是否大于闲置时间 idleTime,来自动执行退出登录的操作。

最后,在页面卸载时停止计时器,避免造成无效的资源浪费。

4、注意事项:

需要注意的是,该方案中可能存在一些特殊的场景,例如用户在打开多个标签页时,只有当前标签页被标记为非闲置状态时计时器才会被重置,因此需要根据实际情况进行调整。


http://www.ppmy.cn/news/88282.html

相关文章

APACHE-ATLAS-2.1.0简介(二)

APACHE-ATLAS-2.1.0简介(一) 什么是元数据? 元数据(METADATA),用一句话定义就是:描述数据的数据。元数据打通了数据源、数据仓库、数据应用之间的壁垒,记录了数据从产生到消费的全过程。 ATLAS的问题列表 APACHE-ATLAS-STACKO…

App 软件开发《单选1》试卷及答案解析

App 软件开发《单选1》试卷及答案解析 注:本文章所有答案及解析均来自 ChatGPT 的回答,正确性请自行甄辨。 文章目录 App 软件开发《单选1》试卷及答案解析单选题(共计0分)1.angular ui-router中的关键词不包括&#x…

Niagara—— System和Emitter节点

目录 一,发射器节点 Properties Emitter Spawn Emitter Update Particle Spawn Particle Update Renderer 二,系统节点 Properties System Spawn System Update Niagara是按照从上到下按顺序,依次执行模块Module(可编程…

【TOOLS: Linux与windows及linux与linux之间文件传输常用方法及命令】

文章目录 1.1.1 Windows和VirtualBox(Ubuntu)之间文件穿传输方法1.1.2 SCP 文件传输方法1.1.3 FTP 文件传输方法 1.1.1 Windows和VirtualBox(Ubuntu)之间文件穿传输方法 1)设置 virtualbox 中的共享文件夹,用户可以在windows某个盘下创建自己的共享文件…

Java程序设计入门教程--变量和常量的声明与使用

目录 变量 常量 变量 声明 对于变量的定义,就是程序中值可以改变的量。 说明: (1)Java要求在使用一个变量之前要对变量的类型加以声明。 (2)Java中一个变量的声明就是一条完整的Java语句,所…

华为OD机试真题 Java 实现【查找充电设备组合】【2023Q1 100分】

一、题目描述 某个充电站,可提供n个充电设备,每个充电设备均有对应的输出功率。任意个充电设备组合的输出功率总和,均构成功率集合P的1个元素。功率集合P的最优元素,表示最接近充电站最大输出功率p_max的元素。 二、输入描述 输…

Tip5:针对Recursive STARK的哈希函数

1. 引言 Neptune和Polygon团队2023年论文《The Tip5 Hash Function for Recursive STARKs》。 当前面向arithmetization的哈希函数,主要有3种设计策略: 1)Marvellous设计策略(见2019年论文Design of symmetric-key primitives …

统计数据自动补全不存在日期 天

// 获取列表数据 sql SELECT FROM_UNIXTIME(add_time, ‘%Y-%m-%d’) add_time, attr_name, product_id, COUNT(*) total FROM cd_order WHERE pay_status 2 AND add_time > 1664616618 AND add_time < 1667295018 GROUP BY FROM_UNIXTIME(add_time, ‘%Y-%m-%d’) // …