2012-09-25 81 views
5

所以我創建了一個類實現SessionhandlerInterface並將其設置爲一個會話處理程序:SessionHandlerInterface寫方法不會被調用

$sessionHandler = new SessionHandler(); 
session_set_save_handler($sessionHandler); 
session_start(); 

的問題是,寫功能不會被調用。

如果我使用的session_set_save_handler的第二個參數,並將其設置爲false:

session_set_save_handler($sessionHandler, false); 

然後它工作正常。有人可以向我解釋這種行爲嗎?我正在使用PHP 5.4.6。

在本文檔中有記載:

當使用對象作爲會話保存處理程序,它註冊到PHP的關機功能,以避免PHP的方式意想不到的副作用內部破壞在關閉的對象是非常重要的並可能阻止寫入和關閉被調用。通常你應該使用register_shutdown_function()函數註冊'session_write_close'。

自PHP 5.4.0可以使用session_register_shutdown()或簡單地使用OOP方法並傳遞實現SessionHandlerInterface一個實例調用一下session_set_save_handler()時所使用的「寄存器關閉」標誌。

但我不完全明白這一點。

+0

'SessionHandler'的實現是什麼? –

+0

如何調用'session_write_close()'? –

回答

1

documentation狀態如下:

「寫入」的處理程序不被執行,直到之後的輸出流是 關閉。因此,「寫入」處理程序 中的調試語句的輸出將永遠不會在瀏覽器中看到。如果需要調試輸出,則建議將調試輸出寫入文件。

這可能是爲什麼如果你使用簡單的echo就看不到被調用的函數。

+0

感謝您在'session_set_save_handler'文檔中提及此行。在'write'的文檔中,沒有提到這個... – emfi