PHP 中的工作階段支援提供了一種在後續訪問中保留特定資料的方法。
訪問您網站的訪客會被分配一個唯一的 ID,即所謂的工作階段 ID。它會儲存在使用者端的 Cookie 中,或是在 URL 中傳播。
工作階段支援允許您將資料儲存在全域變數陣列 $_SESSION 中,以便在請求之間使用。當訪客訪問您的網站時,PHP 會自動檢查(如果 session.auto_start 設定為 1)或根據您的請求(透過 session_start() 明確啟動)請求中是否傳送了特定的工作階段 ID。如果是,則會重新建立先前儲存的環境。
如果您啟用 session.auto_start,那麼將物件放入工作階段的唯一方法是使用 auto_prepend_file 載入其類別定義,否則您必須先將物件 serialize(),然後再 unserialize()。
$_SESSION(以及所有已註冊的變數)在請求完成後,會由 PHP 使用 session.serialize_handler ini 設定指定的序列化處理器,在內部進行序列化。未定義的已註冊變數會被標記為未定義。在後續的訪問中,除非使用者稍後定義它們,否則這些變數不會被 Session 模組定義。
由於 Session 資料會被序列化,因此 資源 類型變數無法儲存在 Session 中。
序列化處理器(php
和 php_binary
)繼承了 register_globals 的限制。因此,不能使用包含特殊字元(|
和 !
)的數字索引或字串索引。使用這些索引將會在腳本關閉時產生錯誤。php_serialize
則沒有這些限制。
注意:
請注意,在使用 Session 時,只有在透過將新的鍵值新增到 $_SESSION 超全域陣列來註冊變數後,才會建立 Session 記錄。無論是否已使用 session_start() 函式啟動 Session,都是如此。