Fork me on GitHub

上一章 文档首页 下一章


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

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_Multi($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;

    }

运行效果如下:

apic

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

1.28.3 一如其他框架的建议

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

1.28.4 扩展你的COOKIE

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


上一章 文档首页 下一章