2012-09-25 10 views
5

Así que he creado una clase que implementa SessionHandlerInterface y configurarlo como un gestor de sesiones:método de escritura SessionHandlerInterface no siendo llamado

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

El problema es, la función de escritura nunca es llamado.

Si utilizo el segundo parámetro de session_set_save_handler y la ponga en false:

session_set_save_handler($sessionHandler, false); 

entonces funciona correctamente. ¿Alguien puede explicarme este comportamiento? Estoy usando PHP 5.4.6.

En la documentación allí se escribe:

Al utilizar objetos como sesión Guardar manipuladores, es importante registrar la función de apagado con PHP para evitar efectos secundarios inesperados de la forma en PHP destruye internamente objetos en el apagado y puede evitar que se escriba y cierre. Normalmente, debe registrar 'session_write_close' utilizando la función register_shutdown_function().

A partir de PHP 5.4.0 se puede utilizar session_register_shutdown() o simplemente utilizar la bandera 'registro de apagado' cuando se invoca session_set_save_handler() utilizando el método de programación orientada a objetos y pasando una instancia que implementa SessionHandlerInterface.

Pero no entiendo completamente eso.

+0

¿Cuál es la implementación de 'SessionHandler'? –

+0

¿Qué tal si llamas a 'session_write_close()'? –

Respuesta

1

Los documentation indica lo siguiente:

El "escribir" manipulador no se ejecuta hasta después de que el flujo de salida es cerrado. Por lo tanto, el resultado de las instrucciones de depuración en el controlador "write" nunca se verá en el navegador. Si es necesario depurar la salida, se sugiere que la salida de depuración se escriba en un archivo.

Esta es probablemente la razón por la que no ve la función a la que se llama si utiliza un simple echo.

+0

gracias por referirse a esta línea en el documento de 'session_set_save_handler'. en el documento de "escritura", esto no se menciona ... – emfi

Cuestiones relacionadas