cookie只是session綁定用戶端的一種途徑,其它的還有比如url等 session_set_save_handler僅僅是對伺服器端,session的儲存方式,預設為檔案儲存體,可更改為任何其它儲存,比如資料庫,memcache等
可以使用 session_set_save_handler的函數:
bool session_set_save_handler(callback $open, callback $close,
callback $read, callback $write,
callback $destroy, callback $gc)
注意: 使用本函數前,先要配置php.ini檔案,session.save_hadler=user ,否則,session_set_save_handler()不會生效。
第一個參數是開啟會話時調用的處理器,接受兩個參數 save_path 和 session_name,分別是會話儲存路徑 (要記得 PHP 預設機制是檔案方式的,因此有檔案路徑) 和 COOKIE 中用於儲存 SESSION ID 的鍵名,其中鍵名可以通過 session_name 來擷取和修改
第二個參數是關閉會話時的處理器,沒有參數
第三個參數是讀取會話時的處理器,接受一個參數 session_id,代表 COOKIE 中儲存的會話 ID
第四個參數是儲存會話時的處理器,接受兩個參數 session_id 和 session_data。官方手冊中提及到,PHP 5.0.5 以後,close 和 write 處理器將會在類析構之後調用,因此處理器內不能使用類和拋出異常 (Exception 也是一個類) 而在解構函式內可以使用 SESSION,因此我們需要在程式中 (比如在 open 或者 read 處理器內) 聲明一下保證讓 session_write_close 在析構前完成
register_shutdown_function('session_write_close');
第五個參數是刪除會話時的處理器,接受一個參數 session_id,代表 COOKIE 中儲存的會話 ID
最後一個參數是會話到期時的處理器,接受一個參數 maxlifetime,代表逾時秒數