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程序设计有所帮助。