Vue - 实现用户长时间不操作,自动退出登录

该博客介绍了如何在前端实现自动登录与超时退出功能。通过监听用户操作并使用sessionStorage记录最后操作时间,当超过设定的10秒钟无操作时,系统将自动跳转至登录页面并清空sessionStorage。此功能在用户长时间不活动时增强了系统安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 在 util 文件夹下创建一个 auto_loginout.js 文件

    import router from '@/router'
    export default function () {
        let setInterval = null;//定时器
        let timeOut = 10 * 1000 // 设置超时时间: 10秒钟
        // console.log("开始", new Date().getTime())
        // 初次向sessionStorage存入操作时间
        window.sessionStorage.setItem('lastTime', new Date().getTime())
        // 每次操作页面,更新sessionStorage存入的操作时间
        window.onload = function () {
            window.document.onmousedown = function () {
                // console.log("开始", new Date().getTime())
                window.sessionStorage.setItem('lastTime', new Date().getTime())
            }
        }
        function checkTimeout() {
            let currentTime = new Date().getTime() // 当前时间
            let lastTime = window.sessionStorage.getItem("lastTime")//上次操作的时间
            // 判断是否超时
            if (currentTime - lastTime >= timeOut) {
                // console.log("结束", new Date().getTime())
                // 清除定时器
                window.clearInterval(setInterval);
                // 清除sessionStorage
                window.sessionStorage.clear('lastTime')
                // 跳到登陆页
                if (router.history.current.fullPath !== '/' && router.history.current.fullPath !== '/login') {
                    router.push("/login")
                    window.location.reload()
                }
            }
        }
        /* 定时器 间隔2秒检测是否长时间未操作页面 */
        setInterval = window.setInterval(checkTimeout, 2000)
    }
    
  2. main.js 中引用,通过全局方法 Vue.use() 使用

    // 自动退出文件路径
    import auto_loginout from '@/util/auto_loginout.js'
    Vue.use(auto_loginout)
    
Vue项目中,为了实现用户登录状态的自动退出功能,当用户长时间未进行任何操作(如点击、输入等),可以利用浏览器的`visibilitychange`事件和定时器结合来检测用户的活动状态。通常的做法是在用户成功登录后设置一个计时器,并在`visibilitychange`事件触发时检查当前页面是否可见: ```javascript // 定义一个全局变量保存用户登录状态 const userLoggedIn = true; // 设置超时时间(例如60分钟) let timeoutId; // 页面加载完成后,开始计时 window.addEventListener('load', function() { startAutoLogout(); }); function startAutoLogout() { // 如果用户登录 if (userLoggedIn) { // 每隔一段时间(比如5秒)检查一次页面可见性 timeoutId = setTimeout(function() { checkUserActivity(); }, 5000); } } // 当页面可见性改变时,处理逻辑 window.addEventListener('visibilitychange', function(event) { checkUserActivity(); }); function checkUserActivity() { // 获取当前页面可见性状态 const isPageVisible = document.visibilityState === 'visible'; // 如果页面可见并且已设置了超时 if (isPageVisible && timeoutId) { // 重置定时器 clearTimeout(timeoutId); // 重新开始计时 startAutoLogout(); } else if (!isPageVisible) { // 若页面可见,执行登出逻辑 logoutFunction(); // 调用登出函数,实际业务中这里可能需要清除token或跳转到登录页 } } // 登录函数 function logoutFunction() { userLoggedIn = false; // 清除相关状态或数据 } ``` 在这个例子中,`logoutFunction()`是你自定义的登出处理函数,可以根据实际情况调整。需要注意的是,这只是一个基础示例,实际应用中还需要考虑到其他因素,如跨域请求、网络状况下的处理等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值