當(dāng)使用HTTP/HTTPS協(xié)議并需要使用COOKIE時,可參考此部分的使用說明。
如同其他的服務(wù)一樣,我們在使用前需要對COOKIE進(jìn)行注冊。COOKIE服務(wù)注冊在\PhalApi\DI()->cookie
中,可以使用PhalApi\Cookie實例進(jìn)行初始化,如:
$config = array('domain' => '.phalapi.net');
\PhalApi\DI()->cookie = new PhalApi\Cookie($config);
其中,PhalApi\Cookie
的構(gòu)造函數(shù)是一個配置數(shù)組,上面指定了Cookie的有效域名/子域名。其他的選項還有:
配置選項 | 說明 | 默認(rèn)值 |
---|---|---|
path | Cookie有效的服務(wù)器路徑 | NULL |
domain | Cookie的有效域名/子域名 | NULL |
secure | 是否僅僅通過安全的HTTPS連接傳給客戶端 | FALSE |
httponly | 是否僅可通過HTTP協(xié)議訪問 | FALSE |
注冊COOKIE服務(wù)后,便可以開始在項目中使用了。COOKIE的使用主要有三種操作,分別是:設(shè)置COOKIE、獲取COOKIE、刪除COOKIE。下面是一些簡單的使用示例。
// 設(shè)置COOKIE
// Set-Cookie:"name=phalapi; expires=Sun, 07-May-2017 03:26:45 GMT; domain=.phalapi.net"
\PhalApi\DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);
// 獲取COOKIE,輸出:phalapi
echo \PhalApi\DI()->cookie->get('name');
// 刪除COOKIE
\PhalApi\DI()->cookie->delete('name');
實際情況,項目對于COOKIE的使用情況更為復(fù)雜。比如,需要對數(shù)據(jù)進(jìn)行加解密,或者需要突破COOKIE設(shè)置后下一次請求才能生效的限制。為此,PhalApi提供一個升級版的COOKIE服務(wù)。其特點主要有:
當(dāng)需要使用這個升級版COOKIE替代簡單版COOKIE服務(wù)時,可使用PhalApi\Cookie\MultiCookie實例進(jìn)行重新注冊。在初始化時,PhalApi\Cookie\MultiCookie
構(gòu)建函數(shù)的第一個參數(shù)配置數(shù)組,除了上面簡單版的配置項外,還有:
配置選項 | 說明 | 默認(rèn)值 |
---|---|---|
crypt | 加解密服務(wù),須實現(xiàn)PhalApi\Crypt接口 | \PhalApi\DI()->crypt |
key | crypt使用的密鑰 | debcf37743b7c835ba367548f07aadc3 |
假設(shè)項目中簡單地使用base64對COOKIE進(jìn)行加解密,則可先添加加解密服務(wù)的實現(xiàn)類。
<?php
namespace App\Common\Crypt\Base64Crypt;
use PhalApi\Crypt;
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
使用該加解密實現(xiàn)類重新注冊\PhalApi\DI()->cookie
服務(wù),由于加解密中未使用到密鑰$key
,所以可以不用配置。
$config = array('domain' => '.phalapi.net', 'crypt' => new App\Common\Crypt\Base64Crypt());
$di->cookie = new PhalApi\Cookie\Multi($config);
最后,便可在項目中像簡單版原來那樣使用升級版的COOKIE服務(wù)了,但設(shè)置的COOKIE值則是經(jīng)過加密后的。
// 設(shè)置COOKIE
// Set-Cookie:"name=cGhhbGFwaQ%3D%3D; expires=Sun, 07-May-2017 03:27:57 GMT; domain=.phalapi.net"
\PhalApi\DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);
此外,在同一次請求中,設(shè)置了某個COOKIE后,也可以“即時”獲取了。
在使用COOKIE時,需要注意:
當(dāng)項目中需要定制專屬的COOKIE服務(wù)時,可以繼承PhalApi\Cookie基類,并按需要重寫對應(yīng)的接口。主要的接口有三個:
PhalApi\Cookie::set($name, $value, $expire = NULL)
PhalApi\Cookie::get($name = NULL)
PhalApi\Cookie::delete($name)
值得注意的是,在實現(xiàn)子類的構(gòu)造函數(shù)中,需要調(diào)用PhalApi_Cookie基類的構(gòu)造方法,以便初始化配置選項。實現(xiàn)子類后,重新注冊便可使用,這里不再贅述。
更多建議: