函數說明
session_set_save_handler 函數用於設定使用者自訂會話儲存。
如果想使用 PHP 內建的會話儲存機制之外的方式, 可以使用本函數。 例如,可以自訂會話儲存函數來將會話資料存放區到資料庫。
用法
bool session_set_save_handler ( callable $open , callable $close , callable $read , callable $write , callable $destroy , callable $gc [, callable $create_sid ] )
從 PHP 5.4 版本開始,可以直接使用更簡單的參數進行自訂會話儲存設定:
bool session_set_save_handler ( SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] )
參數說明
該參數有兩種原型:
第一種原型(PHP 5.4+ 版本可用)為:
sessionhandler
實現了 SessionHandlerInterface 介面的對象,該對象你可以自訂,也可以使用官方提供的 SessionHandler
register_shundown
將函數 session_write_close() 註冊為 register_shutdown_function() 函數。
第二種原型為:
open(string $savePath, string $sessionName)
open 回呼函數類似於類的建構函式, 在會話開啟的時候會被調用。 這是自動開始會話或者通過調用 session_start() 手動開始會話 之後第一個被調用的回呼函數。 此回呼函數操作成功返回 true,反之返回 false。
close()
close 回呼函數類似於類的解構函式。 在 write 回呼函數調用之後調用。 當調用 session_write_close() 函數之後,也會調用 close 回呼函數。 此回呼函數操作成功返回 true,反之返回 false。
read(string $sessionId)
如果會話中有資料,read 回呼函數必須返回將會話資料編碼(序列化)後的字串。 如果會話中沒有資料,read 回呼函數返回Null 字元串。
在自動開始會話或者通過調用 session_start() 函數手動開始會話之後,PHP 內部調用 read 回呼函數來擷取會話資料。 在調用 read 之前,PHP 會調用 open 回呼函數。
read 回調返回的序列化之後的字串格式必須與 write 回呼函數儲存資料時的格式完全一致。 PHP 會自動還原序列化返回的字串並填充 $_SESSION 超級全域變數。 雖然資料看起來和 serialize() 函數很相似, 但是需要提醒的是,它們是不同的。
write(string $sessionId, string $data)
在會話儲存資料時會調用 write 回呼函數。 此回呼函數接收當前會話 ID 以及 $_SESSION 中資料序列化之後的字串作為參數。 序列化會話資料的過程由 PHP 根據 session.serialize_handler 設定值來完成。
序列化後的資料將和會話 ID 關聯在一起進行儲存。 當調用 read 回呼函數擷取資料時,所返回的資料必須要和 傳入 write 回呼函數的資料完全保持一致。
PHP 會在指令碼執行完畢或調用 session_write_close() 函數之後調用此回呼函數。 注意,在調用完此回呼函數之後,PHP 內部會調用 close 回呼函數。
注意:
PHP 會在輸出資料流寫入完畢並且關閉之後 才調用 write 回呼函數, 所以在 write 回呼函數中的調試資訊不會輸出到瀏覽器中。 如果需要在 write 回呼函數中使用調試輸出, 建議將調試輸出寫入到檔案。
destroy($sessionId)
當調用 session_destroy() 函數, 或者調用 session_regenerate_id() 函數並且設定 destroy 參數為 true 時, 會調用此回呼函數。此回呼函數操作成功返回 true,反之返回 false。
gc($lifetime)
為了清理會話中的舊資料,PHP 會不時的調用垃圾收集回呼函數。 調用周期由 session.gc_probability 和 session.gc_divisor 參數控制。 傳入到此回呼函數的 lifetime 參數由 session.gc_maxlifetime 設定。 此回呼函數操作成功返回 true,反之返回 false。
create_sid()
當需要新的會話 ID 時被調用的回呼函數。 回呼函數被調用時無傳入參數, 其傳回值應該是一個字串格式的、有效會話 ID。
傳回值
成功時返回 true, 或者在失敗時返回 false。
以上就是筆記017 PHP中的 session_set_save_handler() 函數的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!