当前位置:首页 > PHP教程 > php类库 > 列表

php实现的Cookies操作类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-14 15:09:28 浏览: 评论:0 

这篇文章主要介绍了php实现的Cookies操作类及其用法实例,包括了常见了保存、读取、更新及清除cookie等操作,在需要进行cookie操作时非常具有实用价值,需要的朋友可以参考下。

本文实例讲述了PHP实现的Cookies操作类及其用法,分享给大家供大家参考。具体分析如下:

一、功能:

1.保存,读取,更新,清除cookies数据。

2.可设置前缀。

3.强制超时控制。

4.cookies数据可以是字符串,数组,对象等。

二、用法:

Cookies.class.php类文件如下:

  1. <?php  
  2. /** Cookies class 保存,读取,更新,清除cookies数据。可设置前缀。强制超时。数据可以是字符串,数组,对象等。  
  3. *  Date:  2013-12-22  
  4. *  Author: fdipzone  
  5. *  Ver:  1.0  
  6.  
  7. *  Func:  
  8. *  public  set    设置cookie  
  9. *  public  get    读取cookie  
  10. *  public  update   更新cookie  
  11. *  public  clear   清除cookie  
  12. *  public  setPrefix 设置前缀  
  13. *  public  setExpire 设置过期时间  
  14. *  private authcode  加密/解密  
  15. *  private pack    将数据打包  
  16. *  private unpack   将数据解包  
  17. *  private getName  获取cookie name,增加prefix处理  
  18. */ 
  19.    
  20. class Cookies{ // class start  
  21.    
  22.   private $_prefix = '';                         // cookie prefix  
  23.   private $_securekey = 'ekOt4_Ut0f3XE-fJcpBvRFrg506jpcuJeixezgPNyALm';  // encrypt key  
  24.   private $_expire = 3600;                        // default expire  
  25.    
  26.   /** 初始化  
  27.   * @param String $prefix   cookie prefix  
  28.   * @param int  $expire   过期时间  
  29.   * @param String $securekey cookie secure key  
  30.   */ 
  31.   public function __construct($prefix=''$expire=0, $securekey=''){  
  32.    
  33.     if(is_string($prefix) && $prefix!=''){  
  34.       $this->_prefix = $prefix;  
  35.     }  
  36.    
  37.     if(is_numeric($expire) && $expire>0){  
  38.       $this->_expire = $expire;  
  39.     }  
  40.    
  41.     if(is_string($securekey) && $securekey!=''){  
  42.       $this->_securekey = $securekey;  
  43.     }  
  44.    
  45.   }  
  46.    
  47.   /** 设置cookie  
  48.   * @param String $name  cookie name  
  49.   * @param mixed $value cookie value 可以是字符串,数组,对象等  
  50.   * @param int  $expire 过期时间  
  51.   */ 
  52.   public function set($name$value$expire=0){  
  53.    
  54.     $cookie_name = $this->getName($name);  
  55.     $cookie_expire = time() + ($expire$expire : $this->_expire);  
  56.     $cookie_value = $this->pack($value$cookie_expire);  
  57.     $cookie_value = $this->authcode($cookie_value'ENCODE'$this->_securekey);  
  58.    
  59.     if($cookie_name && $cookie_value && $cookie_expire){  
  60.       setcookie($cookie_name$cookie_value$cookie_expire);  
  61.     }  
  62.    
  63.   }  
  64.    
  65.   /** 读取cookie  
  66.   * @param String $name  cookie name  
  67.   * @return mixed     cookie value  
  68.   */ 
  69.   public function get($name){  
  70.    
  71.     $cookie_name = $this->getName($name);  
  72.    
  73.     if(isset($_COOKIE[$cookie_name])){  
  74.    
  75.       $cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE'$this->_securekey);  
  76.       $cookie_value = $this->unpack($cookie_value);  
  77.    
  78.       return isset($cookie_value[0])? $cookie_value[0] : null;  
  79.    
  80.     }else{  
  81.       return null;  
  82.     }  
  83.    
  84.   }  
  85.    
  86.   /** 更新cookie,只更新内容,如需要更新过期时间请使用set方法  
  87.   * @param String $name  cookie name  
  88.   * @param mixed $value cookie value  
  89.   * @return boolean  
  90.   */ 
  91.   public function update($name$value){  
  92.    
  93.     $cookie_name = $this->getName($name);  
  94.    
  95.     if(isset($_COOKIE[$cookie_name])){  
  96.    
  97.       $old_cookie_value = $this->authcode($_COOKIE[$cookie_name], 'DECODE'$this->_securekey);  
  98.       $old_cookie_value = $this->unpack($old_cookie_value);  
  99.    
  100.       if(isset($old_cookie_value[1]) && $old_cookie_vlaue[1]>0){ // 获取之前的过期时间  
  101.    
  102.         $cookie_expire = $old_cookie_value[1];  
  103.    
  104.         // 更新数据  
  105.         $cookie_value = $this->pack($value$cookie_expire);  
  106.         $cookie_value = $this->authcode($cookie_value'ENCODE'$this->_securekey);  
  107.    
  108.         if($cookie_name && $cookie_value && $cookie_expire){  
  109.           setcookie($cookie_name$cookie_value$cookie_expire);  
  110.           return true;  
  111.         }  
  112.       }  
  113.     }  
  114.     return false;  
  115.   }  
  116.    
  117.   /** 清除cookie  
  118.   * @param String $name  cookie name  
  119.   */ 
  120.   public function clear($name){  
  121.    
  122.     $cookie_name = $this->getName($name);  
  123.     setcookie($cookie_name);  
  124.   }  
  125.    
  126.   /** 设置前缀  
  127.   * @param String $prefix cookie prefix  
  128.   */ 
  129.   public function setPrefix($prefix){  
  130.    
  131.     if(is_string($prefix) && $prefix!=''){  
  132.       $this->_prefix = $prefix;  
  133.     }  
  134.   }  
  135.    
  136.   /** 设置过期时间  
  137.   * @param int $expire cookie expire  
  138.   */ 
  139.   public function setExpire($expire){  
  140.    
  141.     if(is_numeric($expire) && $expire>0){  
  142.       $this->_expire = $expire;  
  143.     }  
  144.   }  
  145.    
  146.   /** 获取cookie name  
  147.   * @param String $name  
  148.   * @return String  
  149.   */ 
  150.   private function getName($name){  
  151.     return $this->_prefix? $this->_prefix.'_'.$name : $name;  
  152.   }  
  153.    
  154.   /** pack  
  155.   * @param Mixed $data   数据  
  156.   * @param int  $expire  过期时间 用于判断  
  157.   * @return  
  158.   */ 
  159.   private function pack($data$expire){  
  160.    
  161.     if($data===''){  
  162.       return '';  
  163.     }  
  164.    
  165.     $cookie_data = array();  
  166.     $cookie_data['value'] = $data;  
  167.     $cookie_data['expire'] = $expire;  
  168.     return json_encode($cookie_data);  
  169.   }  
  170.    
  171.   /** unpack  
  172.   * @param Mixed $data 数据  
  173.   * @return       array(数据,过期时间)  
  174.   */ 
  175.   private function unpack($data){  
  176.    
  177.     if($data===''){  
  178.       return array('', 0);  
  179.     }  
  180.    
  181.     $cookie_data = json_decode($data, true);  
  182.    
  183.     if(isset($cookie_data['value']) && isset($cookie_data['expire'])){  
  184.    
  185.       if(time()<$cookie_data['expire']){ // 未过期  
  186.         return array($cookie_data['value'], $cookie_data['expire']);  
  187.       }  
  188.     }  
  189.     return array('', 0);  
  190.   }  
  191.    
  192.   /** 加密/解密数据  
  193.   * @param String $str    原文或密文  
  194.   * @param String $operation ENCODE or DECODE  
  195.   * @return String      根据设置返回明文活密文  
  196.   */ 
  197.   private function authcode($string$operation = 'DECODE'){  
  198.    
  199.     $ckey_length = 4;  // 随机密钥长度 取值 0-32;  
  200.    
  201.     $key = $this->_securekey;  
  202.    
  203.     $key = md5($key);  
  204.     $keya = md5(substr($key, 0, 16));  
  205.     $keyb = md5(substr($key, 16, 16));  
  206.     $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''
  207.    
  208.     $cryptkey = $keya.md5($keya.$keyc);  
  209.     $key_length = strlen($cryptkey);  
  210.    
  211.     $string = $operation == 'DECODE' ? base64_decode(substr($string$ckey_length)) : sprintf('%010d', 0).substr(md5($string.$keyb), 0, 16).$string;  
  212.     $string_length = strlen($string);  
  213.    
  214.     $result = '';  
  215.     $box = range(0, 255);  
  216.    
  217.     $rndkey = array();  
  218.     for($i = 0; $i <= 255; $i++) {  
  219.       $rndkey[$i] = ord($cryptkey[$i % $key_length]);  
  220.     }  
  221.    
  222.     for($j = $i = 0; $i < 256; $i++) {  
  223.       $j = ($j + $box[$i] + $rndkey[$i]) % 256;  
  224.       $tmp = $box[$i];  
  225.       $box[$i] = $box[$j];  
  226.       $box[$j] = $tmp;  
  227.     }  
  228.    
  229.     for($a = $j = $i = 0; $i < $string_length$i++) {  
  230.       $a = ($a + 1) % 256;  
  231.       $j = ($j + $box[$a]) % 256;  
  232.       $tmp = $box[$a];  
  233.       $box[$a] = $box[$j];  
  234.       $box[$j] = $tmp;  
  235.       $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));  
  236.     }  
  237.    
  238.     if($operation == 'DECODE') {  
  239.       if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {  
  240.         return substr($result, 26);  
  241.       } else {  
  242.         return '';  
  243.       }  
  244.     } else {  
  245.       return $keyc.str_replace('='''base64_encode($result));  
  246.     }  //www.phpfensi.com 
  247.   }  
  248. // class end  
  249.    
  250. ?>  

demo.php示例程序如下:

  1. <?php  
  2. require 'Cookies.class.php';  
  3.    
  4. $type = isset($_GET['type'])? strtolower($_GET['type']) : '';  
  5.    
  6. if(!in_array($typearray('set','get','update','clear'))){  
  7.   exit('type not exists');  
  8. }  
  9.    
  10. $obj = new Cookies('member', 10); // obj  
  11.    
  12. switch($type){  
  13.    
  14.   case 'set'// 设置  
  15.     $data = array(  
  16.       'name' => 'fdipzone',  
  17.       'gender' => 'male' 
  18.     );  
  19.     $obj->set('me'$data, 5);  
  20.     echo 'set cookies';  
  21.     break;  
  22.    
  23.   case 'get'// 读取  
  24.     $result = $obj->get('me');  
  25.    
  26.     echo '<pre>';  
  27.     print_r($result);  
  28.     echo '</pre>';  
  29.    
  30.     echo 'get cookies';  
  31.     break;  
  32.    
  33.   case 'update'// 更新  
  34.     $data = array(  
  35.       'name' => 'angelababy',  
  36.       'gender' => 'female' 
  37.     );  
  38.     $flag = $obj->update('me'$data);  
  39.    
  40.     if($flag){  
  41.       echo 'update cookies success';  
  42.     }else{  
  43.       echo 'update cookies false';  
  44.     }  
  45.    
  46.     break;  
  47.    
  48.   case 'clear'// 清除  
  49.     $obj->clear('me');  
  50.     echo 'clear cookies';  
  51.     break;  
  52. ?> 

Tags: Cookies操作类

分享到: