_只要你能把握自己,你就能把握任何東西。 -- 古諺語_
##1.28.1 原生態的支持
應開發同學的需求,這里補充對COOKIE的支持。
因為,確實在項目的開發過程中,有時是需要對COOKIE進行處理的。所以,這里提供了簡單的原生態支持。
下面通過代碼示例來簡明如何使用。
###(1)注冊COOKIE服務
如同其他的服務一樣,我們在使用前需要對COOKIE進行注冊。不需要用到COOKIE的同學,可以忽略此服務的注冊。
在初始化文件init.php中添加如下注冊代碼:
```javascript
//COOKIE
DI()->cookie = 'PhalApi_Cookie';
```
###(2)使用
查看PhalApi_Cookie提供的接口,可以得到針對COOKIE的三種操作:
```javascript
//設置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服務
和原生態的初始化,有些許不同,在于需要配置指定加解密的服務。如下:
```javascript
$config = array('crypt' => $crypt, 'key' => 'a secrect');
DI()->cookie = new PhalApi_Cookie($config);
```
上面中的crypt即為加密解服務,未指定時使用DI()->crypt,需要實現PhalApi_Crypt接口;key則為對應的密鑰。
###(2)使用COOKIE服務
使用同原生態一樣,客戶端感知不到區別,這里不再贅述。
###(3)一個簡單的實現示例
假設我們有這樣一個簡單的加解密類(真的很簡單的):
```javascript
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的操作,需要與瀏覽器可視化測試,所以沒用單元測試):
```javascript
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基類。
- 歡迎使用PhalApi!
- 接口,從簡單開始!
- [1.1]-下載與安裝
- [1.2]-創建一個自己的項目
- [1.3]-在線體驗
- [1.4]-文檔、幫助和官網
- [1.10]-對PhalApi框架的抉擇
- [1.11]-快速入門(backup)
- [1.12]-參數規則:接口參數規則配置
- [1.13]-統一的接口請求方式:_sevice=XXX.XXX
- [1.14]-統一的返回格式和結構:ret-data-msg
- [1.15]-數據庫操作:基于NotORM的使用及優化
- [1.16]-配置讀取:內外網環境配置的完美切換
- [1.17]-日記紀錄:簡化版的日記接口
- [1.18]-快速函數:人性化的關懷
- [1.19]-DI服務速查:各資源服務一覽表
- [1.20]-DB操作:數據庫基本操作速查
- [1.21]-類的自動加載:遵循PEAR包的命名規范
- [1.22]-簽名驗證:自定義簽名規則
- [1.23]-請求和響應:GET和POST兩者皆可得及超越JSON格式返回
- [1.24]-緩存策略:更靈活地可配置化的多級緩存
- [1.25]-國際化翻譯:為走向國際化提前做好翻譯準備
- [1.26]-數據安全:數據對稱加密方案
- [1.27]-精益開發:更富表現力的Model層和重量級數據獲取的應對方案
- [1.28]-COOKIE:對COOKIE原生態的支持及記憶加密升級版
- [1.29]-開放與封閉:多入口和統一初始化
- [1.30]-保持的力量:接口開發最佳實踐
- [1.31]-新型計劃任務:以接口形式實現的計劃任務
- [2.11]-核心思想:DI依賴注入-讓資源更可控
- [2.12]-海量數據:可配置的分庫分表
- [2.13]-接口調試:在線SQL語句查看與性能優化
- [2.14]-測試驅動開發:意圖導向編程下的接口開發
- [2.15]-演進:新型計劃任務續篇
- [2.16]-領域驅動設計:應對復雜領域業務的Domain層
- [2.17]-微服務:Api接口服務層
- [2.18]-定制化:資源服務的再實現
- [2.19]-擴展庫:可重用的擴展類庫
- [2.20]-約定編程:架構明顯的編程風格
- [2.21]-服務器統一部署方案簡明版:CentOs---Nginx---php-fpm---MySql-[--Memcached]
- [2.22]-更多工具:精益項目和團隊建設
- [3.1]-擴展類庫:微信開發
- [3.2]-擴展類庫:代理模式下phprpc協議的輕松支持
- [3.3]-擴展類庫:基于PHPMailer的郵件發送
- [3.4]-擴展類庫:優酷開放平臺接口調用
- [3.5]-擴展類庫:七牛云存儲接口調用
- [3.6]-擴展類庫:新型計劃任務
- [3.8]-擴展類庫:用戶、會話和第三方登錄集成
- [3.9]-擴展類庫:swoole支持下的長鏈接和異步任務實現
- [3.11]-擴展類庫:基于FastRoute的快速路由
- [4.2]-開發實戰2:模擬優酷開放平臺接口項目開發
- [4.3]-開發實戰3:一個簡單的小型項目開發(奔跑吧兄弟投票活動)
- [5.1]-架構與思想:PhalApi核心設計和思想解讀
- [5.2]-雜談:扯一些PhalApi的前世和今生
- [5.3]-框架總結:術語表和PHP開發建議
- [5.4]-許可
- [5.5]-聯系和加入我們
- [5.6]-更新日記
- [5.8]-致框架貢獻者:加入PhalApi開源指南
- [6.1]-基于接口查詢語言的SDK包
- [6.2]-SDK包(JAVA版)
- [6.3]-SDK包(PHP版)
- [6.4]-SDK包(Objective-C版)
- [6.5]-SDK包(javascript版)
- [6.6]-SDK包(Ruby版)
- [8.1]-PhalApi視頻教程
- 附錄1:接口文檔參考模板