Yii Framework Forum: Ejecutar Un Código Al Destruir O Expirar Sesion - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Ejecutar Un Código Al Destruir O Expirar Sesion Cómo ejecutar un código cuando un usuario hace logout o expira. Rate Topic: -----

#1 User is offline   AgentSmith 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-December 12

Posted 12 December 2012 - 10:09 AM

¡Hola a todos!

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).



¡Gracias de antemano!
0

#2 User is offline   robregonm 

  • Expert Yii Developer
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 594
  • Joined: 30-July 09
  • Location:Colombia

Posted 13 December 2012 - 08:41 AM

No lo he intentado, pues todavía no he encontrado una situación donde lo requiera, pero hay varias formas de lograrlo....
  • 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)

Saludos.
Ricardo Obregón

YiiFramework en Español - http://yiiframework.co/ - http://yiiframeworkenespanol.org/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx 1.7, MySQL(MariaDB & PerconaDB), PostgreSQL 9, Yii 2, CanJS
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   AgentSmith 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-December 12

Posted 17 December 2012 - 12:53 PM

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:
'session'=>array(
'class' => 'application.components.CHttpSessionExt',						 
),


Y con el log de la aplicación he puesto una traza por los métodos que he sobrecargado, a ver lo que está sucediendo.

2012/12/17 18:46:13 [trace] [application] [CHttpSessionExt][openSession] start /var/lib/php5 -> PHPSESSID
2012/12/17 18:46:13 [trace] [application] [CHttpSessionExt][readSession] start dqfq2tqcq2uvst4rr3eutr1jm2
2012/12/17 18:46:13 [trace] [application] [CHttpSessionExt][destroySession] start destruction: dqfq2tqcq2uvst4rr3eutr1jm2
2012/12/17 18:46:13 [trace] [application] [CHttpSessionExt][openSession] start /var/lib/php5 -> PHPSESSID
2012/12/17 18:46:13 [trace] [application] [CHttpSessionExt][readSession] start 6tinj4hoeuftbr72dilekt6577

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.

¿Alguna idea?
0

#4 User is offline   AgentSmith 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 12-December 12

Posted 18 December 2012 - 05:15 AM

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').

'session'=>array(
 //'class' => 'application.components.CHttpSessionExt',
 'autoStart' => true,
 'cookieMode' => 'only',
 'savePath' =>  dirname(__FILE__).DIRECTORY_SEPARATOR.'../runtime/sessions'
),


El componente que controla la sesión:
class CHttpSessionExt extends CHttpSession{
	/*
	public function init(){
		parent::init();		
	}*/
	
	public function getUseCustomStorage(){
		return true;
	}
	/*
	 *  openSession, closeSession, readSession, writeSession, destroySession, and gcSession 
	 * */
	
	public function openSession($savePath, $sessionName){		
		Yii::trace( '[CHttpSessionExt][openSession] start '.$savePath.' -> '.$sessionName );	
		return true;		
	}
	
	public function closeSession(){
		Yii::trace( '[CHttpSessionExt][closeSession] start' );		
		return true;
	}
	public function readSession($id){
		Yii::trace( '[CHttpSessionExt][readSession] start '.$id );		
		return true;
	}
	public function writeSession($id, $data){
		Yii::trace( '[CHttpSessionExt][writeSession] start '.$id.' -> '.$data );		
		return true;
	}
	public function destroySession($id){		
		Yii::trace( '[CHttpSessionExt][destroySession] start destruction: '.$id );		
		return true;
	}
	
	public function gcSession($maxLifetime){
		Yii::trace( '[CHttpSessionExt][gcSession] start $maxLifetime:'.$maxLifetime );		
		return true;
	}	
}


¿Por que este componente no salva la sesión de un usuario en el path asignado mientras que el componente por defecto si lo hace?
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users