Session 允許用戶在多個請求中共享數(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 實現(xiàn)了 blink\session\Manager
來應(yīng)用提供 Session 服務(wù)的管理,在應(yīng)用中,我們可以通過 session()
輔助方法來獲取 Session 服務(wù)的 實例,下面是幾個展示如何使用 Session 服務(wù)的例子:
// 獲取 Session 服務(wù)的實例
$manager = session();
// 創(chuàng)建一個新的 Session 對象并保存,返回對象為 \blink\session\Session 類的實例
$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()
方法都返回一個 blink\session\Session
類的實例。blink\session\Session
對象是一個以鍵值對形式 存在的 Session 數(shù)據(jù)集合,并提供了一些有用的方法來管理 Session 數(shù)據(jù)。
在 Blink 中,我們也可以實現(xiàn)自定義的 Session 服務(wù),唯一要做的就是實現(xiàn) blink\session\Contract
接口并在配置文件中配置好該服務(wù)。
默認情況下,Blink 采用文件來存儲 Session 數(shù)據(jù)。我們可以通過實現(xiàn)自定義的 Session 存儲類來改變這個行為,實現(xiàn)自定義的存儲類需要實現(xiàn) blink\session\StorageContract
這個接口,更多可以參考 blink\session\FileStorage
類的實現(xiàn)。
更多建議: