Session 允許用戶(hù)在多個(gè)請(qǐng)求中共享數(shù)據(jù),在傳統(tǒng) PHP 程序中,我們可以通過(guò) $_SESSION
超全局變量來(lái)直接獲取 Session 數(shù)據(jù)。但是在 Blink 應(yīng)用中,$_SESSION
超全局變量是沒(méi)有用也不能被使用的,我們必須通過(guò) session 服務(wù)來(lái)獲取 Sesson 數(shù)據(jù)。
另外,由 PHP 提供的 Session 相關(guān)函數(shù)也不能出現(xiàn)在 Blink 應(yīng)用中,以避免出現(xiàn)一些未知的 Bug 或者未定義的行為。
Blink 實(shí)現(xiàn)了 blink\session\Manager
來(lái)應(yīng)用提供 Session 服務(wù)的管理,在應(yīng)用中,我們可以通過(guò) session()
輔助方法來(lái)獲取 Session 服務(wù)的 實(shí)例,下面是幾個(gè)展示如何使用 Session 服務(wù)的例子:
// 獲取 Session 服務(wù)的實(shí)例
$manager = session();
// 創(chuàng)建一個(gè)新的 Session 對(duì)象并保存,返回對(duì)象為 \blink\session\Session 類(lèi)的實(shí)例
$session = $manager->put($data);
// 獲取新創(chuàng)建 Session 的 Session ID
$sessionId = $session->id;
// 通過(guò) Session ID 獲取 Session 數(shù)據(jù)
$session = $manager->get($sessionId);
// 通過(guò) Session ID 寫(xiě)入新的 Session 數(shù)據(jù)
$manager->set($sessionId, $newData);
// 通過(guò) Session ID 銷(xiāo)毀 Session 數(shù)據(jù)
$manager->destroy($sessionId);
在上面的例子中, put()
和 get()
方法都返回一個(gè) blink\session\Session
類(lèi)的實(shí)例。blink\session\Session
對(duì)象是一個(gè)以鍵值對(duì)形式 存在的 Session 數(shù)據(jù)集合,并提供了一些有用的方法來(lái)管理 Session 數(shù)據(jù)。
在 Blink 中,我們也可以實(shí)現(xiàn)自定義的 Session 服務(wù),唯一要做的就是實(shí)現(xiàn) blink\session\Contract
接口并在配置文件中配置好該服務(wù)。
默認(rèn)情況下,Blink 采用文件來(lái)存儲(chǔ) Session 數(shù)據(jù)。我們可以通過(guò)實(shí)現(xiàn)自定義的 Session 存儲(chǔ)類(lèi)來(lái)改變這個(gè)行為,實(shí)現(xiàn)自定義的存儲(chǔ)類(lèi)需要實(shí)現(xiàn) blink\session\StorageContract
這個(gè)接口,更多可以參考 blink\session\FileStorage
類(lèi)的實(shí)現(xiàn)。
更多建議: