PHP Conference Japan 2024

自訂 Session 處理器

要實作資料庫儲存或任何其他儲存方法,您需要使用 session_set_save_handler() 來建立一組使用者層級的儲存函式。 可以使用 SessionHandlerInterface 建立 Session 處理器,或透過繼承 SessionHandler 擴充 PHP 的內部處理器。

session_set_save_handler() 中指定的回呼函式是 PHP 在 Session 生命週期中呼叫的方法:openreadwriteclose,以及用於管理工作的:destroy 用於刪除 Session,gc 用於定期垃圾回收。

因此,PHP 總是需要 session 保存處理器。預設通常是內建的 `files` 保存處理器。可以使用 session_set_save_handler() 設定自訂保存處理器。PHP 擴充套件也提供了其他的內建保存處理器,例如 sqlitememcachememcached,並且可以使用 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 的記錄。

新增註記

使用者貢獻的註記

此頁面沒有使用者貢獻的註記。
To Top