Soy nuevo en el framework y hay cosas que no me quedan muy claras.
Me gustaría saber si es posible meter una funcionalidad que se produzca al expirar una sesión. Esta parte no me ha quedado nada clara, ya que, no termino de entender como maneja las sesiones Yii. Hay algún lugar donde venga explicado (no el sistema de login sino si como y donde almacena las sesiones, he visto que incluso utiliza una tabla en una bases de datos).
No lo he intentado, pues todavía no he encontrado una situación donde lo requiera, pero hay varias formas de lograrlo…
[list=1][]Sobrecargando los métodos de la clase CHttpSession.[]Usando behaviors (este creo que es el más limpio de todos, aunque no estoy seguro de que sea el más sencillo)[*]Usando las funciones propias de PHP (pues yii a su vez las usa)[/list]
No termina de funcionar ya que no crea la sesión, así qué supongo que algo no estoy haciendo bien…
He creado la clase CHttpSessionExt que hereda de CHttpSession y he sobrecargado los métodos:
getUseCustomStorage()
openSession
closeSession
readSession
writeSession
destroySession
gcSession
tal y como se indica en la documentación. En cada método he puesto una traza de control y un "return parent::method" con la intención de que tenga el mismo funcionamiento que CHttpSession.
En el fichero de configuración he creado un componente:
Según aparece en el log crea una sessión y la destruye para más tarde crear una nueva. Verificando el directorio /var/lib/php5, la nueva sesión no tiene ningún archivo por lo que realmente no está creando ninguna sesión.
Después de investigar un poco he visto que eso lo hace normalmente Yii. Si el nombre de usuario y la contraseña son correctos se borra la sesión y se crea una nueva con el usuario logado devolviendo el nuevo id de sesión al usuario.
El problema viene porque no se está creando el archivo de sesión en el servidor. Si cambio la ruta en el config funciona perfectamente. En el momento que cambio el componente para manejar la sesión, no se guardan las sesiones en el path (este o el de por defecto si comento ‘savePath’).