<?php 
 | 
/** 
 | 
 * PhalApi_Cookie_Multi 多级COOKIE 
 | 
 *  
 | 
 * - 使用crypt进行加解密 
 | 
 * - 带记忆功能,即设置后此时能获取 
 | 
 * 
 | 
 * @package PhalApi\Cookie 
 | 
 * @license http://www.phalapi.net/license GPL 协议 
 | 
 * @link http://www.phalapi.net/ 
 | 
 * @author dogstar <chanzonghuang@gmail.com> 2015-04-11 
 | 
 */ 
 | 
  
 | 
class PhalApi_Cookie_Multi extends PhalApi_Cookie { 
 | 
  
 | 
    /** 
 | 
     * @param $config['crypt'] 加密的服务,如果未设置,默认取DI()->crypt,须实现PhalApi_Crypt接口 
 | 
     * @param $config['key'] $config['crypt']用的密钥,未设置时有一个md5串 
 | 
     */ 
 | 
    public function __construct($config = array()) { 
 | 
        parent::__construct($config); 
 | 
  
 | 
        $this->config['crypt'] = isset($config['crypt']) ? $config['crypt'] : DI()->crypt; 
 | 
  
 | 
        if (isset($config['crypt']) && $config['crypt'] instanceof PhalApi_Crypt) { 
 | 
            $this->config['key'] = isset($config['key'])  
 | 
                ? $config['key'] : 'debcf37743b7c835ba367548f07aadc3'; 
 | 
        } else { 
 | 
            $this->config['crypt'] = NULL; 
 | 
        } 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 解密获取COOKIE 
 | 
     * @see PhalApi_Cookie::get() 
 | 
     */ 
 | 
    public function get($name = NULL) { 
 | 
        $rs = parent::get($name); 
 | 
  
 | 
        if (!isset($this->config['crypt'])) { 
 | 
            return $rs; 
 | 
        } 
 | 
  
 | 
        if (is_array($rs)) { 
 | 
            foreach ($rs as &$valueRef) { 
 | 
                $this->config['crypt']->decrypt($valueRef, $this->config['key']); 
 | 
            } 
 | 
        } else if ($rs !== NULL) { 
 | 
            $rs = $this->config['crypt']->decrypt($rs, $this->config['key']); 
 | 
        } 
 | 
  
 | 
        return $rs; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 加密设置COOKIE&记忆功能 
 | 
     * @see PhalApi_Cookie::set() 
 | 
     */ 
 | 
    public function set($name, $value, $expire = NULL) { 
 | 
        if (isset($this->config['crypt'])) { 
 | 
            $value = $this->config['crypt']->encrypt($value, $this->config['key']); 
 | 
        } 
 | 
  
 | 
        $_COOKIE[$name] = $value; 
 | 
        if ($expire < $_SERVER['REQUEST_TIME']) { 
 | 
            unset($_COOKIE[$name]); 
 | 
        } 
 | 
  
 | 
        return parent::set($name, $value, $expire); 
 | 
    } 
 | 
} 
 |