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分钟未操作自动退出功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!