Cet article présente principalement l'utilisation des cookies par PHP pour définir la fonction de sortie automatique pour les utilisateurs qui n'ont pas fonctionné pendant 30 minutes. Les amis qui en ont besoin peuvent se référer à ce qui suit
Ce que le contrôleur de connexion doit faire pour. se connecter avec succès consiste à stocker l'ID utilisateur et d'autres informations dans les cookies :
$this->systemSetKey(array(‘name‘=>$admin_info[‘admin_name‘], ‘id‘=>$admin_info[‘admin_id‘],‘gid‘=>$admin_info[‘admin_gid‘],‘sp‘=>$admin_info[‘admin_is_super‘]));//登陆成功之后做得事情
méthode systemSetKey dans la classe parent :
/** * 系统后台 会员登录后 将会员验证内容写入对应cookie中 * * @param string $name 用户名 * @param int $id 用户ID * @return bool 布尔类型的返回结果 */ protected final function systemSetKey($user){ setNcCookie(‘sys_key‘,encrypt(serialize($user),MD5_KEY),3600,‘‘,null);//设置cookie 过期时间为30分钟。这边设置cookie框架有带自己加密规则,具体是否需要加密自己看着设置。 }
La méthode de construction du contrôleur de classe parent détermine si l'utilisateur est connecté :
protected function __construct(){ Language::read(‘common,layout‘); /** * 验证用户是否登录 * $admin_info 管理员资料 name id */ $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 * @return array 数组类型的返回结果 */ protected final function systemLogin(){ //取得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; }
/** * 加密函数 * * @param string $txt 需要加密的字符串 * @param string $key 密钥 * @return string 返回加密结果 */ function encrypt($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; }
/** * 解密函数 * * @param string $txt 需要解密的字符串 * @param string $key 密匙 * @return string 字符串类型的返回结果 */ function decrypt($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; }
Compréhension et utilisation du cookie PHP
Exemple de code de vérification de connexion à l'aide d'un cookie php
Connaissez-vous un point à noter lors de l'utilisation de Php Cookie ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!