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