vue3页面无操作,一段时间后自动退出登录

场景:用户登录系统,设置超时时间为20分钟,用户超过20分钟未点击页面,自动退出登录

ps:后端有token校验,就不用在页面修改了,弊端是用户机器的时间修改,判断也就不准确了。

 大概思路就是,登录之后获取时间戳,然后每次点击鼠标获取点击的时间戳,用点击的时间戳减去登录成功的时间戳然后与超时时间作比较,时间戳相减数值单位是毫秒,注意换算,sessionStorage.getItem('loginTime')是我在登陆方法存放的值,用来判断用户是否是登陆状态,只有在该值不为空也就是登录状态下才会触发清除token,退出登录

modal是框架封装的,具体情况自己解析写一下把。

<template>
  <div id="app" @click="isTimeOut">
    <router-view />
  </div>
</template>

<script>
import { Modal } from '@arco-design/web-vue'

export default {
  name: 'App',

  data() {
    return {
      lastTime: null,
      currentTime: null,
      //10分钟未检测到鼠标点击就退出登录,后台正常校验20h
      timeOut: 10 * 100 * 60,
    }
  },
  created() {
    this.lastTime = new Date().getTime()
  },
  methods: {
    isTimeOut() {
      console.log('点击')
      this.currentTime = new Date().getTime()
      // 判断上次最后一次点击的时间和这次点击的时间间隔
      if (this.currentTime - this.lastTime > this.timeOut) {
        if (null != sessionStorage.getItem('loginTime')) {
          Modal.warning({
            title: '提示',
            content: '身份验证已过期,请重新登录',
            onOk: () => {
              localStorage.clear()
              sessionStorage.clear();
              location.reload()
            },
          });

        }
      } else {
        // 如果在期限内点击,则把这次点击的时间覆盖掉之前存的最后一次点击的时间
        this.lastTime = new Date().getTime()
      }
    }
  }
}
</script>

因为组长提到这个功能了,先是百度看了一些方法,理清思路,慢慢摸索出来的,判断用户是否登录是很有必要的,不能在已经退出或者未登录情况下一直提示用户身份过期,晚上依旧难眠,辗转反侧,把这个小功能记录下吧。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 3 中可以使用 `watch` 来监听用户的操作,实现一定时间无操作后跳转到登录页面。具体的实现思路如下: 1. 定义一个计时器变量和一个定时器变量,用于记录用户最后一次操作的时间和定时器的 ID。 2. 在页面加载时,使用 `watch` 监听 `$route` 对象,当用户进行路由跳转时,将计时器重置为当前时间。 3. 定义一个函数,用于检查当前时间与计时器记录的时间差是否超过指定的时间间隔,如果超过了,则跳转到登录页面。 4. 在页面加载时启动定时器,定时检查时间间隔是否超过指定值,如果超过了则跳转到登录页面。 以下是一个简单的实现示例代码: ```javascript import { onMounted, onUnmounted, watch } from 'vue' export default { setup() { // 定义一个计时器变量和一个定时器变量 let lastActiveTime = new Date().getTime() let timer = null // 使用 watch 监听 $route 对象,重置计时器 watch( '$route', () => { lastActiveTime = new Date().getTime() }, { immediate: true } ) // 定义跳转函数,用于检查时间间隔并跳转到登录页面 function checkTimeout() { const now = new Date().getTime() const timeout = 60000 // 设定超时时间为60秒 if (now - lastActiveTime > timeout) { window.location.href = 'login.html' // 跳转到登录页面 } } onMounted(() => { // 启动定时器,每10秒检查一次时间间隔 timer = setInterval(checkTimeout, 10000) }) onUnmounted(() => { // 在组件卸载时清除定时器 clearInterval(timer) }) } } ``` 上述代码会在用户最后一次操作后的60秒内不断检查时间间隔,并在超时时跳转到登录页面。你可以根据需要修改超时时间和定时器的时间间隔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庞胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值