需要注意的是,如果從此方法返回 FALSE,PHP 將會輸出以下警告:
警告:未知:無法寫入階段工作期資料 (user)。請確認 session.save_path 的目前設定是否正確 (/var/lib/php/session) in Unknown on line 0.
這可能會造成一些小問題,但是如果根據設計不應該寫入階段工作期,那麼在處理(而不是寫入)階段工作期後返回 TRUE 將避免進一步的問題。
總而言之,除了硬體錯誤的情況外,最好始終返回 TRUE。
(PHP 5 >= 5.4.0, PHP 7, PHP 8)
SessionHandlerInterface::write — 寫入工作階段資料
將階段工作期資料寫入階段工作期儲存區。當 session_register_shutdown() 失敗,或在正常關閉期間,由 session_write_close() 呼叫。注意:SessionHandlerInterface::close() 會在此函式之後立即被呼叫。
當階段工作期準備好儲存和關閉時,PHP 將呼叫此方法。它將來自 $_SESSION 超全域變數的階段工作期資料編碼為序列化字串,並將其連同階段工作期 ID 傳遞給此方法以進行儲存。使用的序列化方法在 session.serialize_handler 設定中指定。
請注意,此方法通常在輸出緩衝區關閉後由 PHP 呼叫,除非由 session_write_close() 明確呼叫。
id
階段工作期 ID。
data
已編碼的階段工作期資料。此資料是 PHP 內部將 $_SESSION 超全域變數編碼為序列化字串並將其作為此參數傳遞的結果。請注意,階段工作期使用替代的序列化方法。
需要注意的是,如果從此方法返回 FALSE,PHP 將會輸出以下警告:
警告:未知:無法寫入階段工作期資料 (user)。請確認 session.save_path 的目前設定是否正確 (/var/lib/php/session) in Unknown on line 0.
這可能會造成一些小問題,但是如果根據設計不應該寫入階段工作期,那麼在處理(而不是寫入)階段工作期後返回 TRUE 將避免進一步的問題。
總而言之,除了硬體錯誤的情況外,最好始終返回 TRUE。
注意:如果 $session_data 未更改,則不會呼叫此函式。為了在每次階段工作期即將關閉時都呼叫此函式,請新增 $_SESSION["timestamp"] = time();
警告:session_write_close():階段工作期回呼需要 true/false 返回值,位於 Unknown on line 0
我在 write() 中返回了 TRUE,但警告仍然存在。然後我也在 close() 中返回了 TRUE,警告就消失了。