COOKIE:对COOKIE原生态的支持及记忆加密升级版
只要你能把握自己,你就能把握任何东西。 -- 古谚语
1.28.1 原生态的支持
应开发同学的需求,这里补充对COOKIE的支持。
因为,确实在项目的开发过程中,有时是需要对COOKIE进行处理的。所以,这里提供了简单的原生态支持。
下面通过代码示例来简明如何使用。
(1)注册COOKIE服务
如同其他的服务一样,我们在使用前需要对COOKIE进行注册。不需要用到COOKIE的同学,可以忽略此服务的注册。
在初始化文件init.php中添加如下注册代码:
//COOKIE
DI()->cookie = 'PhalApi_Cookie';
(2)使用
查看PhalApi_Cookie提供的接口,可以得到针对COOKIE的三种操作:
//设置COOKIE服务
DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);
//获取
echo DI()->cookie->get('name'); //输出 phalapi
//删除
DI()->cookie->delete('name');
1.28.2 记忆加密升级版
实际情况,项目的使用的情况更为复杂。
比如,需要对数据进行加解密,或者需要突破COOKIE的限制(设置后需要下一次请求才能获取,不过这也正是COOKIE的特点),想记住这一次设置的内容。所以,额外提供了这个升级版本。
(1)注册COOKIE服务
和原生态的初始化,有些许不同,在于需要配置指定加解密的服务。如下:
$config = array('crypt' => $crypt, 'key' => 'a secrect');
DI()->cookie = new PhalApi_Cookie($config);
上面中的crypt即为加密解服务,未指定时使用DI()->crypt,需要实现PhalApi_Crypt接口;key则为对应的密钥。
(2)使用COOKIE服务
使用同原生态一样,客户端感知不到区别,这里不再赘述。
(3)一个简单的实现示例
假设我们有这样一个简单的加解密类(真的很简单的):
class Cookie_Crypt_Mock implements PhalApi_Crypt {
public function encrypt($data, $key) {
return base64_encode($data);
}
public function decrypt($data, $key) {
return base64_decode($data);
}
}
随后,写一个简单的接口测试一下(因为涉及到COOKIE的操作,需要与浏览器可视化测试,所以没用单元测试):
public function cookieTest() {
$rs = array();
$config = array('crypt' => new Cookie_Crypt_Mock(), 'key' => 'a secrect');
DI()->cookie = new PhalApi_Cookie_Multi($config);
$rs['aEKey'] = DI()->cookie->get('name');
DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);
return $rs;
}
运行效果如下:
从上图中可以看出,COOKIE在浏览器已经被我们做了“加密”,哈哈~
1.28.3 一如其他框架的建议
- 1、敏感数据不要存到COOKIE,以保证数据安全
- 2、大的数据不要存到COOKIE,以保证瘦的客户端
1.28.4 扩展你的COOKIE
如需扩展,请重载PhalApi_Cookie基类。