2.5 PhalApi 2.x COOKIE

2018-07-28 21:24 更新

COOKIE

當(dāng)使用HTTP/HTTPS協(xié)議并需要使用COOKIE時(shí),可參考此部分的使用說明。

COOKIE的基本使用

如同其他的服務(wù)一樣,我們?cè)谑褂们靶枰獙?duì)COOKIE進(jìn)行注冊(cè)。COOKIE服務(wù)注冊(cè)在\PhalApi\DI()->cookie中,可以使用PhalApi\Cookie實(shí)例進(jìn)行初始化,如:

$config = array('domain' => '.phalapi.net');
\PhalApi\DI()->cookie = new PhalApi\Cookie($config);

其中,PhalApi\Cookie的構(gòu)造函數(shù)是一個(gè)配置數(shù)組,上面指定了Cookie的有效域名/子域名。其他的選項(xiàng)還有:

配置選項(xiàng) 說明 默認(rèn)值
path Cookie有效的服務(wù)器路徑 NULL
domain Cookie的有效域名/子域名 NULL
secure 是否僅僅通過安全的HTTPS連接傳給客戶端 FALSE
httponly 是否僅可通過HTTP協(xié)議訪問 FALSE

注冊(cè)COOKIE服務(wù)后,便可以開始在項(xiàng)目中使用了。COOKIE的使用主要有三種操作,分別是:設(shè)置COOKIE、獲取COOKIE、刪除COOKIE。下面是一些簡(jiǎn)單的使用示例。

// 設(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');

記憶加密升級(jí)版

實(shí)際情況,項(xiàng)目對(duì)于COOKIE的使用情況更為復(fù)雜。比如,需要對(duì)數(shù)據(jù)進(jìn)行加解密,或者需要突破COOKIE設(shè)置后下一次請(qǐng)求才能生效的限制。為此,PhalApi提供一個(gè)升級(jí)版的COOKIE服務(wù)。其特點(diǎn)主要有:

  • 1、對(duì)COOKIE進(jìn)行加密輸出、解密獲取
  • 2、自帶記憶功能,即本次請(qǐng)求設(shè)置COOKIE后便可直接獲取

當(dāng)需要使用這個(gè)升級(jí)版COOKIE替代簡(jiǎn)單版COOKIE服務(wù)時(shí),可使用PhalApi\Cookie\MultiCookie實(shí)例進(jìn)行重新注冊(cè)。在初始化時(shí),PhalApi\Cookie\MultiCookie構(gòu)建函數(shù)的第一個(gè)參數(shù)配置數(shù)組,除了上面簡(jiǎn)單版的配置項(xiàng)外,還有:

配置選項(xiàng) 說明 默認(rèn)值
crypt 加解密服務(wù),須實(shí)現(xiàn)PhalApi\Crypt接口 \PhalApi\DI()->crypt
key crypt使用的密鑰 debcf37743b7c835ba367548f07aadc3

假設(shè)項(xiàng)目中簡(jiǎn)單地使用base64對(duì)COOKIE進(jìn)行加解密,則可先添加加解密服務(wù)的實(shí)現(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使用該加解密實(shí)現(xiàn)類重新注冊(cè)\PhalApi\DI()->cookie服務(wù),由于加解密中未使用到密鑰$key,所以可以不用配置。

$config = array('domain' => '.phalapi.net', 'crypt' => new App\Common\Crypt\Base64Crypt());
$di->cookie = new PhalApi\Cookie\Multi($config);

最后,便可在項(xiàng)目中像簡(jiǎn)單版原來那樣使用升級(jí)版的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);

此外,在同一次請(qǐng)求中,設(shè)置了某個(gè)COOKIE后,也可以“即時(shí)”獲取了。

在使用COOKIE時(shí),需要注意:

  • 1、敏感數(shù)據(jù)不要存到COOKIE,以保證數(shù)據(jù)安全性
  • 2、盡量不要在COOKIE存放過多數(shù)據(jù),避免產(chǎn)生不必要的流量消耗

擴(kuò)展:定制專屬的COOKIE

當(dāng)項(xiàng)目中需要定制專屬的COOKIE服務(wù)時(shí),可以繼承PhalApi\Cookie基類,并按需要重寫對(duì)應(yīng)的接口。主要的接口有三個(gè):

  • 設(shè)置COOKIE:PhalApi\Cookie::set($name, $value, $expire = NULL)
  • 獲取COOKIE:PhalApi\Cookie::get($name = NULL)
  • 刪除COOKIE:PhalApi\Cookie::delete($name)

值得注意的是,在實(shí)現(xiàn)子類的構(gòu)造函數(shù)中,需要調(diào)用PhalApi_Cookie基類的構(gòu)造方法,以便初始化配置選項(xiàng)。實(shí)現(xiàn)子類后,重新注冊(cè)便可使用,這里不再贅述。

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

掃描二維碼

下載編程獅App

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

編程獅公眾號(hào)