php实现的Cookies操作类实例
本文实例讲述了PHP实现的Cookies操作类及其用法,分享给大家供大家参考。具体分析如下:
一、功能:
1.保存,读取,更新,清除cookies数据。
2.可设置前缀。
3.强制超时控制。
4.cookies数据可以是字符串,数组,对象等。
二、用法:
Cookies.class.php类文件如下:
<?php /**Cookiesclass保存,读取,更新,清除cookies数据。可设置前缀。强制超时。数据可以是字符串,数组,对象等。 *Date:2013-12-22 *Author:fdipzone *Ver:1.0 * *Func: *publicset设置cookie *publicget读取cookie *publicupdate更新cookie *publicclear清除cookie *publicsetPrefix设置前缀 *publicsetExpire设置过期时间 *privateauthcode加密/解密 *privatepack将数据打包 *privateunpack将数据解包 *privategetName获取cookiename,增加prefix处理 */ classCookies{//classstart private$_prefix='';//cookieprefix private$_securekey='ekOt4_Ut0f3XE-fJcpBvRFrg506jpcuJeixezgPNyALm';//encryptkey private$_expire=3600;//defaultexpire /**初始化 *@paramString$prefixcookieprefix *@paramint$expire过期时间 *@paramString$securekeycookiesecurekey */ publicfunction__construct($prefix='',$expire=0,$securekey=''){ if(is_string($prefix)&&$prefix!=''){ $this->_prefix=$prefix; } if(is_numeric($expire)&&$expire>0){ $this->_expire=$expire; } if(is_string($securekey)&&$securekey!=''){ $this->_securekey=$securekey; } } /**设置cookie *@paramString$namecookiename *@parammixed$valuecookievalue可以是字符串,数组,对象等 *@paramint$expire过期时间 */ publicfunctionset($name,$value,$expire=0){ $cookie_name=$this->getName($name); $cookie_expire=time()+($expire?$expire:$this->_expire); $cookie_value=$this->pack($value,$cookie_expire); $cookie_value=$this->authcode($cookie_value,'ENCODE',$this->_securekey); if($cookie_name&&$cookie_value&&$cookie_expire){ setcookie($cookie_name,$cookie_value,$cookie_expire); } } /**读取cookie *@paramString$namecookiename *@returnmixedcookievalue */ publicfunctionget($name){ $cookie_name=$this->getName($name); if(isset($_COOKIE[$cookie_name])){ $cookie_value=$this->authcode($_COOKIE[$cookie_name],'DECODE',$this->_securekey); $cookie_value=$this->unpack($cookie_value); returnisset($cookie_value[0])?$cookie_value[0]:null; }else{ returnnull; } } /**更新cookie,只更新内容,如需要更新过期时间请使用set方法 *@paramString$namecookiename *@parammixed$valuecookievalue *@returnboolean */ publicfunctionupdate($name,$value){ $cookie_name=$this->getName($name); if(isset($_COOKIE[$cookie_name])){ $old_cookie_value=$this->authcode($_COOKIE[$cookie_name],'DECODE',$this->_securekey); $old_cookie_value=$this->unpack($old_cookie_value); if(isset($old_cookie_value[1])&&$old_cookie_vlaue[1]>0){//获取之前的过期时间 $cookie_expire=$old_cookie_value[1]; //更新数据 $cookie_value=$this->pack($value,$cookie_expire); $cookie_value=$this->authcode($cookie_value,'ENCODE',$this->_securekey); if($cookie_name&&$cookie_value&&$cookie_expire){ setcookie($cookie_name,$cookie_value,$cookie_expire); returntrue; } } } returnfalse; } /**清除cookie *@paramString$namecookiename */ publicfunctionclear($name){ $cookie_name=$this->getName($name); setcookie($cookie_name); } /**设置前缀 *@paramString$prefixcookieprefix */ publicfunctionsetPrefix($prefix){ if(is_string($prefix)&&$prefix!=''){ $this->_prefix=$prefix; } } /**设置过期时间 *@paramint$expirecookieexpire */ publicfunctionsetExpire($expire){ if(is_numeric($expire)&&$expire>0){ $this->_expire=$expire; } } /**获取cookiename *@paramString$name *@returnString */ privatefunctiongetName($name){ return$this->_prefix?$this->_prefix.'_'.$name:$name; } /**pack *@paramMixed$data数据 *@paramint$expire过期时间用于判断 *@return */ privatefunctionpack($data,$expire){ if($data===''){ return''; } $cookie_data=array(); $cookie_data['value']=$data; $cookie_data['expire']=$expire; returnjson_encode($cookie_data); } /**unpack *@paramMixed$data数据 *@returnarray(数据,过期时间) */ privatefunctionunpack($data){ if($data===''){ returnarray('',0); } $cookie_data=json_decode($data,true); if(isset($cookie_data['value'])&&isset($cookie_data['expire'])){ if(time()<$cookie_data['expire']){//未过期 returnarray($cookie_data['value'],$cookie_data['expire']); } } returnarray('',0); } /**加密/解密数据 *@paramString$str原文或密文 *@paramString$operationENCODEorDECODE *@returnString根据设置返回明文活密文 */ privatefunctionauthcode($string,$operation='DECODE'){ $ckey_length=4;//随机密钥长度取值0-32; $key=$this->_securekey; $key=md5($key); $keya=md5(substr($key,0,16)); $keyb=md5(substr($key,16,16)); $keyc=$ckey_length?($operation=='DECODE'?substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):''; $cryptkey=$keya.md5($keya.$keyc); $key_length=strlen($cryptkey); $string=$operation=='DECODE'?base64_decode(substr($string,$ckey_length)):sprintf('%010d',0).substr(md5($string.$keyb),0,16).$string; $string_length=strlen($string); $result=''; $box=range(0,255); $rndkey=array(); for($i=0;$i<=255;$i++){ $rndkey[$i]=ord($cryptkey[$i%$key_length]); } for($j=$i=0;$i<256;$i++){ $j=($j+$box[$i]+$rndkey[$i])%256; $tmp=$box[$i]; $box[$i]=$box[$j]; $box[$j]=$tmp; } for($a=$j=$i=0;$i<$string_length;$i++){ $a=($a+1)%256; $j=($j+$box[$a])%256; $tmp=$box[$a]; $box[$a]=$box[$j]; $box[$j]=$tmp; $result.=chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256])); } if($operation=='DECODE'){ if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){ returnsubstr($result,26); }else{ return''; } }else{ return$keyc.str_replace('=','',base64_encode($result)); } } }//classend ?>
demo.php示例程序如下:
<?php require'Cookies.class.php'; $type=isset($_GET['type'])?strtolower($_GET['type']):''; if(!in_array($type,array('set','get','update','clear'))){ exit('typenotexists'); } $obj=newCookies('member',10);//obj switch($type){ case'set'://设置 $data=array( 'name'=>'fdipzone', 'gender'=>'male' ); $obj->set('me',$data,5); echo'setcookies'; break; case'get'://读取 $result=$obj->get('me'); echo'<pre>'; print_r($result); echo'</pre>'; echo'getcookies'; break; case'update'://更新 $data=array( 'name'=>'angelababy', 'gender'=>'female' ); $flag=$obj->update('me',$data); if($flag){ echo'updatecookiessuccess'; }else{ echo'updatecookiesfalse'; } break; case'clear'://清除 $obj->clear('me'); echo'clearcookies'; break; } ?>
本文完整实例源码点击此处本站下载。
希望本文所述对大家的PHP程序设计有所帮助。