PHP利用Cookie设置用户30分钟未操作自动退出功能
登陆控制器需要做的登陆成功把用户ID等信息存入cookie:
$this->systemSetKey(array(‘name‘=>$admin_info[‘admin_name‘],‘id‘=>$admin_info[‘admin_id‘],‘gid‘=>$admin_info[‘admin_gid‘],‘sp‘=>$admin_info[‘admin_is_super‘]));//登陆成功之后做得事情
父类中的systemSetKey方法:
/**
*系统后台会员登录后将会员验证内容写入对应cookie中
*
*@paramstring$name用户名
*@paramint$id用户ID
*@returnbool布尔类型的返回结果
*/
protectedfinalfunctionsystemSetKey($user){
setNcCookie(‘sys_key‘,encrypt(serialize($user),MD5_KEY),3600,‘‘,null);//设置cookie过期时间为30分钟。这边设置cookie框架有带自己加密规则,具体是否需要加密自己看着设置。
}
父类控制器构造方法判断用户是否有登陆:
protectedfunction__construct(){
Language::read(‘common,layout‘);
/**
*验证用户是否登录
*$admin_info管理员资料nameid
*/
$this->admin_info=$this->systemLogin();//取得管理员的资料,之后的子类控制器继承构造方法
if($this->admin_info[‘id‘]!=1){
//验证权限
$this->checkPermission();
}
//转码防止GBK下用ajax调用时传汉字数据出现乱码
if(($_GET[‘branch‘]!=‘‘||$_GET[‘op‘]==‘ajax‘)&&strtoupper(CHARSET)==‘GBK‘){
$_GET=Language::getGBK($_GET);
}
}
/**
*系统后台登录验证
*
*@param
*@returnarray数组类型的返回结果
*/
protectedfinalfunctionsystemLogin(){
//取得cookie内容,解密,和系统匹配
$user=unserialize(decrypt(cookie(‘sys_key‘),MD5_KEY));//取cookie里面储存的信息,现在使用的框架里面自定义了cookie的加密方式
if(!key_exists(‘gid‘,(array)$user)||!isset($user[‘sp‘])||(empty($user[‘name‘])||empty($user[‘id‘]))){//假如不存在说明用户没登陆或者用户长时间未操作cookie时间过期跳到登陆页面去
@header(‘Location:index.php?mod=login&action=login‘);exit;
}else{
$this->systemSetKey($user);//如果用户有登陆的话,每一个操作都会重写刷新cookie;
}
return$user;
}
加密函数:
/**
*加密函数
*
*@paramstring$txt需要加密的字符串
*@paramstring$key密钥
*@returnstring返回加密结果
*/
functionencrypt($txt,$key=‘‘){
if(empty($txt))return$txt;
if(empty($key))$key=md5(MD5_KEY);
$chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
$ikey="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
$nh1=rand(0,64);
$nh2=rand(0,64);
$nh3=rand(0,64);
$ch1=$chars{$nh1};
$ch2=$chars{$nh2};
$ch3=$chars{$nh3};
$nhnum=$nh1+$nh2+$nh3;
$knum=0;$i=0;
while(isset($key{$i}))$knum+=ord($key{$i++});
$mdKey=substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8+16);
$txt=base64_encode(time().‘_‘.$txt);
$txt=str_replace(array(‘+‘,‘/‘,‘=‘),array(‘-‘,‘_‘,‘.‘),$txt);
$tmp=‘‘;
$j=0;$k=0;
$tlen=strlen($txt);
$klen=strlen($mdKey);
for($i=0;$i<$tlen;$i++){
$k=$k==$klen?0:$k;
$j=($nhnum+strpos($chars,$txt{$i})+ord($mdKey{$k++}))%64;
$tmp.=$chars{$j};
}
$tmplen=strlen($tmp);
$tmp=substr_replace($tmp,$ch3,$nh2%++$tmplen,0);
$tmp=substr_replace($tmp,$ch2,$nh1%++$tmplen,0);
$tmp=substr_replace($tmp,$ch1,$knum%++$tmplen,0);
return$tmp;
}
解密函数:
/**
*解密函数
*
*@paramstring$txt需要解密的字符串
*@paramstring$key密匙
*@returnstring字符串类型的返回结果
*/
functiondecrypt($txt,$key=‘‘,$ttl=0){
if(empty($txt))return$txt;
if(empty($key))$key=md5(MD5_KEY);
$chars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.";
$ikey="-x6g6ZWm2G9g_vr0Bo.pOq3kRIxsZ6rm";
$knum=0;$i=0;
$tlen=@strlen($txt);
while(isset($key{$i}))$knum+=ord($key{$i++});
$ch1=@$txt{$knum%$tlen};
$nh1=strpos($chars,$ch1);
$txt=@substr_replace($txt,‘‘,$knum%$tlen--,1);
$ch2=@$txt{$nh1%$tlen};
$nh2=@strpos($chars,$ch2);
$txt=@substr_replace($txt,‘‘,$nh1%$tlen--,1);
$ch3=@$txt{$nh2%$tlen};
$nh3=@strpos($chars,$ch3);
$txt=@substr_replace($txt,‘‘,$nh2%$tlen--,1);
$nhnum=$nh1+$nh2+$nh3;
$mdKey=substr(md5(md5(md5($key.$ch1).$ch2.$ikey).$ch3),$nhnum%8,$knum%8+16);
$tmp=‘‘;
$j=0;$k=0;
$tlen=@strlen($txt);
$klen=@strlen($mdKey);
for($i=0;$i<$tlen;$i++){
$k=$k==$klen?0:$k;
$j=strpos($chars,$txt{$i})-$nhnum-ord($mdKey{$k++});
while($j<0)$j+=64;
$tmp.=$chars{$j};
}
$tmp=str_replace(array(‘-‘,‘_‘,‘.‘),array(‘+‘,‘/‘,‘=‘),$tmp);
$tmp=trim(base64_decode($tmp));
if(preg_match("/\d{10}_/s",substr($tmp,0,11))){
if($ttl>0&&(time()-substr($tmp,0,11)>$ttl)){
$tmp=null;
}else{
$tmp=substr($tmp,11);
}
}
return$tmp;
}
以上所述是小编给大家介绍的PHP利用Cookie设置用户30分钟未操作自动退出功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!