要實作資料庫儲存或任何其他儲存方法,您需要使用 session_set_save_handler() 來建立一組使用者層級的儲存函式。 可以使用 SessionHandlerInterface 建立 Session 處理器,或透過繼承 SessionHandler 擴充 PHP 的內部處理器。
在 session_set_save_handler() 中指定的回呼函式是 PHP 在 Session 生命週期中呼叫的方法:open
、read
、write
和 close
,以及用於管理工作的:destroy
用於刪除 Session,gc
用於定期垃圾回收。
因此,PHP 總是需要 session 保存處理器。預設通常是內建的 `files` 保存處理器。可以使用 session_set_save_handler() 設定自訂保存處理器。PHP 擴充套件也提供了其他的內建保存處理器,例如 sqlite
、memcache
和 memcached
,並且可以使用 session.save_handler 進行設定。
當 session 開始時,PHP 會在內部呼叫 open
處理器,接著是 read
回呼函式,該函式應返回一個編碼字串,與最初傳遞用於儲存的字串完全相同。一旦 read
回呼函式返回編碼字串,PHP 將對其進行解碼,然後將結果陣列填入 $_SESSION 超全域變數。
當 PHP 關閉時(或呼叫 session_write_close() 時),PHP 會在內部編碼 $_SESSION 超全域變數,並將其與 session ID 一起傳遞給 write
回呼函式。在 write
回呼函式完成後,PHP 會在內部呼叫 close
回呼處理器。
當一個 session 被明確銷毀時,PHP 會使用 session ID 呼叫 destroy
處理器。
PHP 會不時呼叫 gc
回呼函式,根據設定的 session 最大生命週期來使 session 記錄過期。此例程應從永久儲存區中刪除所有上次存取時間超過 $lifetime
的記錄。