COOKIE:對(duì)COOKIE原生態(tài)的支持及記憶加密升級(jí)版

2018-11-21 21:18 更新

只要你能把握自己,你就能把握任何東西。 -- 古諺語(yǔ)

1.28.1 原生態(tài)的支持

應(yīng)開發(fā)同學(xué)的需求,這里補(bǔ)充對(duì)COOKIE的支持。

因?yàn)?,確實(shí)在項(xiàng)目的開發(fā)過(guò)程中,有時(shí)是需要對(duì)COOKIE進(jìn)行處理的。所以,這里提供了簡(jiǎn)單的原生態(tài)支持。

下面通過(guò)代碼示例來(lái)簡(jiǎn)明如何使用。

(1)注冊(cè)COOKIE服務(wù)

如同其他的服務(wù)一樣,我們?cè)谑褂们靶枰獙?duì)COOKIE進(jìn)行注冊(cè)。不需要用到COOKIE的同學(xué),可以忽略此服務(wù)的注冊(cè)。

在初始化文件init.php中添加如下注冊(cè)代碼:

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

(2)使用

查看PhalApi_Cookie提供的接口,可以得到針對(duì)COOKIE的三種操作:

//設(shè)置COOKIE服務(wù)
DI()->cookie->set('name', 'phalapi', $_SERVER['REQUEST_TIME'] + 600);

//獲取
echo DI()->cookie->get('name');  //輸出 phalapi

//刪除
DI()->cookie->delete('name');

1.28.2 記憶加密升級(jí)版

實(shí)際情況,項(xiàng)目的使用的情況更為復(fù)雜。

比如,需要對(duì)數(shù)據(jù)進(jìn)行加解密,或者需要突破COOKIE的限制(設(shè)置后需要下一次請(qǐng)求才能獲取,不過(guò)這也正是COOKIE的特點(diǎn)),想記住這一次設(shè)置的內(nèi)容。所以,額外提供了這個(gè)升級(jí)版本。

(1)注冊(cè)COOKIE服務(wù)

和原生態(tài)的初始化,有些許不同,在于需要配置指定加解密的服務(wù)。如下:

$config = array('crypt' => $crypt, 'key' => 'a secrect');
DI()->cookie = new PhalApi_Cookie($config);

上面中的crypt即為加密解服務(wù),未指定時(shí)使用DI()->crypt,需要實(shí)現(xiàn)PhalApi_Crypt接口;key則為對(duì)應(yīng)的密鑰。

(2)使用COOKIE服務(wù)

使用同原生態(tài)一樣,客戶端感知不到區(qū)別,這里不再贅述。

(3)一個(gè)簡(jiǎn)單的實(shí)現(xiàn)示例

假設(shè)我們有這樣一個(gè)簡(jiǎn)單的加解密類(真的很簡(jiǎn)單的):

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);
    }
}

隨后,寫一個(gè)簡(jiǎn)單的接口測(cè)試一下(因?yàn)樯婕暗紺OOKIE的操作,需要與瀏覽器可視化測(cè)試,所以沒(méi)用單元測(cè)試):

    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;

    }

運(yùn)行效果如下:

apic

從上圖中可以看出,COOKIE在瀏覽器已經(jīng)被我們做了“加密”,哈哈~

1.28.3 一如其他框架的建議

  • 1、敏感數(shù)據(jù)不要存到COOKIE,以保證數(shù)據(jù)安全
  • 2、大的數(shù)據(jù)不要存到COOKIE,以保證瘦的客戶端

1.28.4 擴(kuò)展你的COOKIE

如需擴(kuò)展,請(qǐng)重載PhalApi_Cookie基類。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)