• vue设置页面超时15分钟自动退出登录


    需求:用户登录后,如果长时间未操作页面这个时候需要自动退出登录回到登录页面。

    注意点:这里我们如果把超时的时间放到浏览器里面存储,我们要放到本地存储里面localStorage里面

    Vue设置长时间未操作登录以后自动到期返回登录页

    方法一:

    在app.vue中添加点击事件,并且点击时候添加点击的时间,这里我们进行判断是否超时情况
    Vue2里面的使用

    <template>
      <!-- 添加点击事件 -->
      <div id="app" style="height: 100%" @click="isTimeOut">
        <router-view/>
      </div>
    </template>
    
    <script>
    export default {
      name: 'App',
    
      data () {
        return {
          lastTime: null, // 最后一次点击的时间
          currentTime: null, // 当前点击的时间
          timeOut: 15 * 60 * 1000 // 设置超时时间:30分钟
        }
      },
      created () {
        this.lastTime = new Date().getTime()
      },
      methods: {
        isTimeOut () {
          this.currentTime = new Date().getTime() // 记录这次点击的时间
          if (this.currentTime - this.lastTime > this.timeOut) { // 判断上次最后一次点击的时间和这次点击的时间间隔是否大于30分钟
            if (localStorage.getItem('loginInfo')) { // 如果是登录状态
              localStorage.clear()
              sessionStorage.clear();
              this.$router.push({name: 'login'})
            } else {
              this.lastTime = new Date().getTime()
            }
          } else {
            this.lastTime = new Date().getTime() // 如果在30分钟内点击,则把这次点击的时间记录覆盖掉之前存的最后一次点击的时间
          }
        }
      }
    }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    方法二:

    Vue3里面应用:

    在路由ruouter路由加载后进行判断是否有超时的逻辑

    在这里插入图片描述

    具体引用如下:

    在utils里面创建点击是否超时的组件如下activeCheck.ts

    import { Local, Session } from "./storage"
    import router from '/@/router';
    const timeOut = 15 * 60 * 1000; //设置超时时间: 15分
    
    function updateActiveTime() {
      localStorage.setItem('lastActiveTime', new Date().getTime() + '');
    }
    
    window.onload = function () {
      window.document.onmousedown = updateActiveTime;
    };
    
    let checkActiveInterval: any = null
    
    export const startActiveCheck = () => {
      if (checkActiveInterval !== null) return
      updateActiveTime();
      checkActiveInterval = setInterval(() => {
        const currentTime = new Date().getTime();
        const lastActiveTime = localStorage.getItem('lastActiveTime');
        if (currentTime - Number(lastActiveTime) > timeOut) {
          Local.clear();
          Session.clear();
          clearInterval(checkActiveInterval)
          checkActiveInterval = null
          router.push('/login');
        }
      }, 30000);
    }
    
    export const endActiveCheck = () => {
      clearInterval(checkActiveInterval)
      checkActiveInterval = null
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    这里的storage.ts存储组件如下:

    import Cookies from 'js-cookie';
    
    /**
     * window.localStorage 浏览器永久缓存
     * @method set 设置永久缓存
     * @method get 获取永久缓存
     * @method remove 移除永久缓存
     * @method clear 移除全部永久缓存
     */
    export const Local = {
    	// 查看 v2.4.3版本更新日志
    	setKey(key: string) {
    		// @ts-ignore
    		return `${__NEXT_NAME__}:${key}`;
    	},
    	// 设置永久缓存
    	set<T>(key: string, val: T) {
    		window.localStorage.setItem(Local.setKey(key), JSON.stringify(val));
    	},
    	// 获取永久缓存
    	get(key: string) {
    		let json = <string>window.localStorage.getItem(Local.setKey(key));
    		try{
    			return JSON.parse(json);
    		}catch{
    			return json
    		}
    	},
    	// 移除永久缓存
    	remove(key: string) {
    		window.localStorage.removeItem(Local.setKey(key));
    	},
    	// 移除全部永久缓存
    	clear() {
    		window.localStorage.clear();
    	},
    };
    
    /**
     * window.sessionStorage 浏览器临时缓存
     * @method set 设置临时缓存
     * @method get 获取临时缓存
     * @method remove 移除临时缓存
     * @method clear 移除全部临时缓存
     */
    export const Session = {
    	// 设置临时缓存
    	set<T>(key: string, val: T) {
    		window.sessionStorage.setItem(Local.setKey(key), JSON.stringify(val));
    	},
    	// 获取临时缓存
    	get(key: string) {
    		let json = <string>window.sessionStorage.getItem(Local.setKey(key));
    		return JSON.parse(json);
    	},
    	// 移除临时缓存
    	remove(key: string) {
    		window.sessionStorage.removeItem(Local.setKey(key));
    	},
    	// 移除全部临时缓存
    	clear() {
    		window.sessionStorage.clear();
    	},
    };
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    import { endActiveCheck, startActiveCheck } from '../utils/activeCheck';
    // 路由加载后
    router.afterEach((to) => {
      NProgress.done();
      if (to.path === '/login') {
        endActiveCheck()
      } else {
        startActiveCheck()
      }
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    Android 弹幕功能实现
    哈希表的概念
    规则解读(三)| 本地资源检测 For Unreal
    java毕业生设计药品管理系统演示录像2021计算机源码+系统+mysql+调试部署+lw
    Spring详解
    李立宗《讲给入门者的深度学习》
    list容器排序案例
    vivado产生报告阅读分析10-时序报告6
    Node.JS入门(day01)
    nodejs微信小程序+python+PHP-维斯公司财务管理系统的设计与实现-计算机毕业设计推荐
  • 原文地址:https://blog.csdn.net/qq_44552416/article/details/133769022