<?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);
|
}
|
}
|