×
PhalApi 2.x 前言

PhalApi 2.x 快速开发

1.1 下载与安装1.2 运行Hello World1.3 如何请求接口服务1.4 接口响应与在线调试1.5 Api接口层1.6 Domain领域层和ADM模式1.7 Model数据层与数据库操作1.8 单元测试1.9 自动加载和PSR-41.10 接口文档

PhalApi 2.x 数据库

2.1 数据库链接2.2 数据库与NotORM2.3 数据库使用和查询2.4 数据库分库分表策略2.5 连接多个数据库2.6 打印和保存SQL语句2.7 定制你的Model基类

PhalApi 2.x 高级专题

3.1 PhalApi 2.x 接口参数3.2 PhalApi 2.x 配置3.3 PhalApi 2.x 日志3.4 PhalApi 2.x 缓存3.5 PhalApi 2.x 过滤器3.6 PhalApi 2.x COOKIE3.7 PhalApi 2.x 加密3.8 PhalApi 2.x 国际化3.9 PhalApi 2.x CURL请求3.10 PhalApi 2.x 工具和杂项3.11 PhalApi 2.x DI服务汇总

PhalApi 2.x 发现更多

4.1 PhalApi 2.x 扩展类库4.2 PhalApi 2.x SDK包的使用4.3 PhalApi 2.x 脚本命令

关于PhalApi 2.x

5.1 PhalApi 2.x 版本完美诠释5.2 PhalApi 2.x 升级指南5.3 PhalApi 2.x VS PhalApi 1.x

3.6 PhalApi 2.x COOKIE


当使用HTTP/HTTPS协议并需要使用COOKIE时,可参考此部分的使用说明。

COOKIE的基本使用

如同其他的服务一样,我们在使用前需要对COOKIE进行注册。COOKIE服务注册在PhalApiDI()->cookie中,可以使用PhalApiCookie实例进行初始化,如:

$config = array('domain' => '.phalapi.net');
PhalApiDI()->cookie = new PhalApiCookie($config);

其中,PhalApiCookie的构造函数是一个配置数组,上面指定了Cookie的有效域名/子域名。其他的选项还有:

配置选项 说明 默认值
path Cookie有效的服务器路径 NULL
domain Cookie的有效域名/子域名 NULL
secure 是否仅仅通过安全的HTTPS连接传给客户端 FALSE
httponly 是否仅可通过HTTP协议访问 FALSE

注册COOKIE服务后,便可以开始在项目中使用了。COOKIE的使用主要有三种操作,分别是:设置COOKIE、获取COOKIE、删除COOKIE。下面是一些简单的使用示例。

// 设置COOKIE
// Set-Cookie:"name=phalapi; expires=Sun, 07-May-2017 03:26:45 GMT; domain=.phalapi.net"
PhalApiDI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);

// 获取COOKIE,输出:phalapi
echo PhalApiDI()->cookie->get('name');

// 删除COOKIE
PhalApiDI()->cookie->delete('name');

记忆加密升级版

实际情况,项目对于COOKIE的使用情况更为复杂。比如,需要对数据进行加解密,或者需要突破COOKIE设置后下一次请求才能生效的限制。为此,PhalApi提供一个升级版的COOKIE服务。其特点主要有:

  • 1、对COOKIE进行加密输出、解密获取
  • 2、自带记忆功能,即本次请求设置COOKIE后便可直接获取

当需要使用这个升级版COOKIE替代简单版COOKIE服务时,可使用PhalApiCookieMultiCookie实例进行重新注册。在初始化时,PhalApiCookieMultiCookie构建函数的第一个参数配置数组,除了上面简单版的配置项外,还有:

配置选项 说明 默认值
crypt 加解密服务,须实现PhalApiCrypt接口 PhalApiDI()->crypt
key crypt使用的密钥 debcf37743b7c835ba367548f07aadc3

假设项目中简单地使用base64对COOKIE进行加解密,则可先添加加解密服务的实现类。

<?php
namespace AppCommonCryptBase64Crypt;

use PhalApiCrypt;

class Base64Crypt implements Crypt {

    public function encrypt($data, $key) {
        return base64_encode($data);
    }

    public function decrypt($data, $key) {
        return base64_decode($data);
    }
}

随后,在文件./config/di.php使用该加解密实现类重新注册PhalApiDI()->cookie服务,由于加解密中未使用到密钥$key,所以可以不用配置。

$config = array('domain' => '.phalapi.net', 'crypt' => new AppCommonCryptBase64Crypt());
$di->cookie = new PhalApiCookieMulti($config);

最后,便可在项目中像简单版原来那样使用升级版的COOKIE服务了,但设置的COOKIE值则是经过加密后的。

// 设置COOKIE
// Set-Cookie:"name=cGhhbGFwaQ%3D%3D; expires=Sun, 07-May-2017 03:27:57 GMT; domain=.phalapi.net"
PhalApiDI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);

此外,在同一次请求中,设置了某个COOKIE后,也可以“即时”获取了。

在使用COOKIE时,需要注意:

  • 1、敏感数据不要存到COOKIE,以保证数据安全性
  • 2、尽量不要在COOKIE存放过多数据,避免产生不必要的流量消耗

扩展:定制专属的COOKIE

当项目中需要定制专属的COOKIE服务时,可以继承PhalApiCookie基类,并按需要重写对应的接口。主要的接口有三个:

  • 设置COOKIE:PhalApiCookie::set($name, $value, $expire = NULL)
  • 获取COOKIE:PhalApiCookie::get($name = NULL)
  • 删除COOKIE:PhalApiCookie::delete($name)

值得注意的是,在实现子类的构造函数中,需要调用PhalApi_Cookie基类的构造方法,以便初始化配置选项。实现子类后,重新注册便可使用,这里不再赘述。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)