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