可以有2种方法解决,php可以,js也可以,但是php有弊端,就是如果没有网络请求才算是没有操作;所以这里推荐用js的方法。 js解决方法: 修改文件路径: application/admin/view/common/script.html 把下面这段复制到最下面即可(记得把里面的5s改成5分钟哈) 代码: <script> top.window.logoutTime = 5*1000; // 5s,单位为毫秒 console.log('logoutTime: ', top.window.logoutTime); if(typeof top.window.logoutTimer == 'undefined'){ top.window.logoutTimer = null } function clearAllCookies() { var cookies = document.cookie.split(";"); for (var i = 0; i < cookies.length; i++) { var cookie = cookies[i]; var eqPos = cookie.indexOf("="); var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;"; } } function logout() { // 执行退出操作,例如跳转到退出登录页面 clearAllCookies() setTimeout(() => { let h = '/'+location.pathname.split('/')[1]+'/index/login' console.log('h: ', h); top.window.location.href = h; }, 50); } function startLogoutTimer() { top.window.logoutTimer = setTimeout(logout, top.window.logoutTime); } function resetLogoutTimer() { clearTimeout(top.window.logoutTimer); startLogoutTimer(); } // resetLogoutTimer() window.addEventListener('mousemove', resetLogoutTimer); window.addEventListener('keydown', resetLogoutTimer); window.addEventListener('mouseout', function(event) { // 鼠标离开了当前框架 // console.log("鼠标离开了当前框架"); clearTimeout(top.window.logoutTimer) }); window.onfocus = function() { // console.log('获取到焦点',location.href); resetLogoutTimer() }; window.onblur = function() { // 在窗口失去焦点时执行的代码 // console.log('失去焦点',location.href); resetLogoutTimer() }; </script> php解决方法: 这需要修改session的底层逻辑,打开如下文件 thinkphp/library/think/Session.php 把下面代码加在boot里,修改里面的10为300即可(10是一个测试时间,10秒钟自动退出) 本文隐藏内容 - 星球会员可见 代码: if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > 10)) { session_unset(); // 清除session变量 session_destroy(); // 销毁session exit(); } // 用户有活动,更新最后活动时间戳 $_SESSION['last_activity'] = time(); 这样10秒内只要没有新的网络请求,则会自动退出。