只要你能把握自己,你就能把握任何东西。 — 古谚语

1.28.1 原生态的支持

应开发同学的需求,这里补充对COOKIE的支持。

因为,确实在项目的开发过程中,有时是需要对COOKIE进行处理的。所以,这里提供了简单的原生态支持。

下面通过代码示例来简明如何使用。

如同其他的服务一样,我们在使用前需要对COOKIE进行注册。不需要用到COOKIE的同学,可以忽略此服务的注册。

在初始化文件init.php中添加如下注册代码:

  1. //COOKIE
  2. DI()->cookie = 'PhalApi_Cookie';

(2)使用

查看PhalApi_Cookie提供的接口,可以得到针对COOKIE的三种操作:

  1. //设置COOKIE服务
  2. DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);
  3. //获取
  4. echo DI()->cookie->get('name'); //输出 phalapi
  5. //删除
  6. DI()->cookie->delete('name');

1.28.2 记忆加密升级版

实际情况,项目的使用的情况更为复杂。

比如,需要对数据进行加解密,或者需要突破COOKIE的限制(设置后需要下一次请求才能获取,不过这也正是COOKIE的特点),想记住这一次设置的内容。所以,额外提供了这个升级版本。

和原生态的初始化,有些许不同,在于需要配置指定加解密的服务。如下:

  1. $config = array('crypt' => $crypt, 'key' => 'a secrect');
  2. DI()->cookie = new PhalApi_Cookie_Multi($config);

上面中的crypt即为加密解服务,未指定时使用DI()->crypt,需要实现PhalApi_Crypt接口;key则为对应的密钥。

使用同原生态一样,客户端感知不到区别,这里不再赘述。

(3)一个简单的实现示例

假设我们有这样一个简单的加解密类(真的很简单的):

  1. class Cookie_Crypt_Mock implements PhalApi_Crypt {
  2. public function encrypt($data, $key) {
  3. return base64_encode($data);
  4. }
  5. public function decrypt($data, $key) {
  6. return base64_decode($data);
  7. }
  8. }

随后,写一个简单的接口测试一下(因为涉及到COOKIE的操作,需要与浏览器可视化测试,所以没用单元测试):

  1. public function cookieTest() {
  2. $rs = array();
  3. $config = array('crypt' => new Cookie_Crypt_Mock(), 'key' => 'a secrect');
  4. DI()->cookie = new PhalApi_Cookie_Multi($config);
  5. $rs['aEKey'] = DI()->cookie->get('name');
  6. DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);
  7. return $rs;
  8. }

运行效果如下:

apic

从上图中可以看出,COOKIE在浏览器已经被我们做了“加密”,哈哈~

1.28.3 一如其他框架的建议

  • 1、敏感数据不要存到COOKIE,以保证数据安全
  • 2、大的数据不要存到COOKIE,以保证瘦的客户端

如需扩展,请重载PhalApi_Cookie基类。

原文: https://www.phalapi.net/wikis/1-28.html