这几天上级让我做超时登陆验证,当时一听感觉很简单啊,用session,然后再改改配置文件不就是可以了吗,后来在网上看了看才知道这个配置文件不可以乱改,会影响程序运行的效率,接着我就只好试试别的办法了。
起初我采用的是js判断,使用定时器,鼠标移动和点击都会触发事件,然后问题来了,由于页面上有弹出层,弹出之后上一层的计时器依旧运行,虽然可以使用clearInterval可以清除,但是需要考虑的问题甚多,最后我是被焦点的问题给劝退了,如果有想看js写的可以私聊我。
于是我开始考虑第二种方法,我分析了一下网站的结构,所有的行为都继承自一个共有的 类,登陆的session等信息都存在此处,那么,也就是说每次有行为都会经过该类的构造方法,我们可以通过该方法存入两个session,第一个是行为时间session(“timer”,time()),时间取当前时间,之后在定义一个过期时间session(“sleep”,time()+3600),这样第一步算是完成了,行了,上代码
<?php
//框架tp5 只要是MVC模式的按照这种逻辑都一样
namespace app\\index\\controller;
use think\\Controller;
class extends Controller
{
public function __construct(){
parent::__construct();
$this->_user = session(\'user\');
if(!$this->_user){
echo \"< >\";
echo \"top.location.href=\'/index.php/index/account/login\'\";
echo \"</ >\";
} else {
session(\"timer\",time());
//一小时无操作自动退出
session(\"sleep\",time()+3600);
}
}
}
第二步,在前端页面采用ajax,每秒获取一次当前时间,在和过期时间做差,因此ajax访问的类一定不可以继承自 ,我是建立了一个pub类,里面写入了一个isSleep方法,该方法用于判断和更新当前时间。
<?php
namespace app\\index\\controller;
use think\\Controller;
class Pub extends Controller{
public function isSleep(){
//更新当前时间
session(\"timer\",time());
//获取当前时间
$last = session(\"timer\");
//获取退出时间
$max = session(\"sleep\");
if($max - $last <= 0){
exit(json_encode(array(\'timeout\'=>\"true\")));
} else {
exit(json_encode(array(\'timeout\'=>\"false\")));
}
}
}
然后就是前端ajax了,这个就简单多了,只要是导入了jquery就能使用了,我用的是jquery+ , 是用于美化提示框的,可以无视
< src=\"/js/jquery-1.8.2.min.js\"></ >
<input type=\'hidden\' id=\"timer_sleep\" value=\"false\">
< >
setInterval(function(){
//自动退出时间
var sleep;
//获取
var url = \"/index.php/index/pub/isSleep\";
$.get(url,function(e){
$(\"#timer_sleep\").val(\'\');
$(\"#timer_sleep\").val(e.timeout);
},\"json\")
sleep = $(\"#timer_sleep\").val();
//console.log(sleep);
if(sleep == \"true\") {
.alert(\"登陆超时\",{\'icon\':2});
setTimeout(function(){
window.top.location.href = \"/index.php/index/account/login\";
},800)
}
},1000);
</ >
希望能对大家有所帮助吧。
继续阅读与本文标签相同的文章
上一篇 :
得助智能:多媒体协同客户服务会更加智能吗?
-
加速4G、5G网络演进 全“芯”展锐出新招
2026-05-18栏目: 教程
-
男朋友说“亲亲”,先别急着回“木马”,这样回撩他一辈子
2026-05-18栏目: 教程
-
使用vim在文件中插入命令执行的输出结果
2026-05-18栏目: 教程
-
技术分享:轻松调试Stream
2026-05-18栏目: 教程
-
外卖产业呈现新气象,品质化发展趋势明显
2026-05-18栏目: 教程
