当前位置: 首页 > news >正文

vue增加长时间无操作退出登录功能

目录

1. 监控用户操作

2. 设置计时器

3. 实现退出登录逻辑

4.代码逻辑

5.关键点


1. 监控用户操作

你需要监听用户的操作(例如鼠标移动、点击、键盘输入等),并在这些操作发生时重置计时器。

2. 设置计时器

使用 setTimeout 来创建一个计时器,在一小时内没有操作时触发自动退出登录功能。

3. 实现退出登录逻辑

在计时器触发时,执行自动退出登录的逻辑。

4.代码逻辑

<template><div><!-- Your application content --></div>
</template><script>
export default {data() {return {timeout: null,timeoutDuration: 3600000, // 1 hour in milliseconds};},created() {this.resetTimeout();this.addEventListeners();},beforeDestroy() {this.removeEventListeners();if (this.timeout) clearTimeout(this.timeout); // Clean up timeout on destroy},methods: {addEventListeners() {window.addEventListener('mousemove', this.resetTimeout);window.addEventListener('keypress', this.resetTimeout);window.addEventListener('click', this.resetTimeout);},removeEventListeners() {window.removeEventListener('mousemove', this.resetTimeout);window.removeEventListener('keypress', this.resetTimeout);window.removeEventListener('click', this.resetTimeout);},resetTimeout() {if (this.timeout) {clearTimeout(this.timeout);}this.timeout = setTimeout(() => {this.logout();}, this.timeoutDuration);},logout() {var _this = this;// 在这里执行退出登录操作,可以是清除用户信息、跳转到登录页面等_this.$store.state.token="";this.$router.push('/login');    }}
};
</script><style>
/* Your styles here */
</style>

5.关键点

  1. 超时函数: 使用箭头函数 (() => this.logout()) 确保在计时器超时后调用 logout 方法。
  2. 组件销毁: 在 beforeDestroy 钩子中清除计时器,避免组件卸载后仍执行计时器。
  3. 监听用户操作: addEventListeners 方法添加了对 mousemovekeypressclick 事件的监听,以便在用户活动时重置计时器。

  4. 重置计时器: resetTimeout 方法在每次用户操作时清除之前的计时器并设置一个新的计时器。如果在指定的时间段内没有操作,计时器将触发 logout 方法。

  5. 退出登录: logout 方法执行退出登录的逻辑,比如清除用户的会话数据并重定向到登录页面。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C# 数组定义和常用方法
  • AI 浪潮中的一体化数据库|外滩大会之OceanBase实录
  • P1308 [NOIP2011 普及组] 统计单词数
  • aliyun图片存储OSS工具类
  • Cesium 问题:视角漫游时添加的无人机模型飞行时有抖动
  • 【软考】设计模式之责任链模式
  • Tube Qualify三维弯管测量系统用于弯管机修正弯管回弹参数
  • 一维数组的概念和应用
  • Excel单元格操作:读写单元格数据、格式设置与条件格式详解
  • 1.C_数据结构_基本知识
  • 第4章-03-用WebDriver获取页面Cookie
  • HarmonyOS开发5.0【rcp网络请求】
  • 【Android笔记】Android Studio打包 提示Invalid keystore format
  • OpenCV结构分析与形状描述符(14)拟合直线函数fitLine()的使用
  • 【白话MQ】消息队列MQ的使用和选型
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【个人向】《HTTP图解》阅后小结
  • C++类的相互关联
  • leetcode388. Longest Absolute File Path
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Linux快速复制或删除大量小文件
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mysql 5.6 原生Online DDL解析
  • MySQL QA
  • Promise面试题2实现异步串行执行
  • rc-form之最单纯情况
  • Travix是如何部署应用程序到Kubernetes上的
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 后端_MYSQL
  • 使用API自动生成工具优化前端工作流
  • 算法-插入排序
  • 微信小程序填坑清单
  • 我的业余项目总结
  • 我这样减少了26.5M Java内存!
  • 译有关态射的一切
  • 鱼骨图 - 如何绘制?
  • mysql面试题分组并合并列
  • ## 基础知识
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (function(){})()的分步解析
  • (rabbitmq的高级特性)消息可靠性
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (七)Activiti-modeler中文支持
  • (四)汇编语言——简单程序
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • **python多态
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .env.development、.env.production、.env.staging
  • .equals()到底是什么意思?
  • .net core Redis 使用有序集合实现延迟队列
  • .net core 依赖注入的基本用发
  • .net mvc部分视图