CDbHttpSession es la clase encargada en Yii de proveer almacenamiento de las sesiones (yii sessions) en base de datos.
en el archivo protected/config/main.php colocaremos dentro de la sección ‘components’
[sourcecode language=»php»]
‘session’ => array (
‘class’ => ‘system.web.CDbHttpSession’,
‘connectionID’ => ‘db’,
‘sessionTableName’ => ‘tblsession’,
),
[/sourcecode]
Esto nos creara mágicamente una tabla en nuestra base de datos con el nombre que indicamos en sessionTableName, si no indicamos este atributo la tabla sera creada con el nombre YiiSession. Esta tabla tendrá tres (3) campos: id, expire, data
A este punto si usamos el sistema, la tabla tblsession tendrá almacenada nuestra session
.
Extendiendo CDbHttpSession para agregar valores adicionales
Agregaremos el usuario que se autentica y su dirección ip a las sesiones que gestionaremos en nuestra base de datos, para ello extenderemos la clase CDbHttpSession adaptandola a nuestras necesidades. Esto lo lograremos en dos (2) sencillos pasos:
1 – Crearemos el archivo protected/components/MiCDbHttpSession.php y contendrá:
[sourcecode language=»php»]
<?php
class MiCDbHttpSession extends CDbHttpSession{
protected function createSessionTable($db,$tableName){
$driver=$db->getDriverName();
if($driver===’mysql’)
$blob=’LONGBLOB’;
elseif($driver===’pgsql’)
$blob=’BYTEA’;
else
$blob=’BLOB’;
$db->createCommand()->createTable($tableName,array(
‘id’=>’CHAR(32) PRIMARY KEY’,
‘usuario’=>’integer’,
‘ip’=>’CHAR(45)’,
‘expire’=>’integer’,
‘data’=>$blob,
));
}
public function writeSession($id,$data){
try
{
$expire=time()+$this->getTimeout();
$db=$this->getDbConnection();
if($db->createCommand()->select(‘id’)->from($this->sessionTableName)->where(‘id=:id’,array(‘:id’=>$id))->queryScalar()===false)
$db->createCommand()->insert($this->sessionTableName,array(
‘id’=>$id,
‘usuario’=>Yii::app()->user->id,
‘ip’=>$_SERVER[‘REMOTE_ADDR’],
‘data’=>$data,
‘expire’=>$expire,
));
else
$db->createCommand()->update($this->sessionTableName,array(
‘usuario’=>Yii::app()->user->id,
‘ip’=>$_SERVER[‘REMOTE_ADDR’],
‘data’=>$data,
‘expire’=>$expire
),’id=:id’,array(‘:id’=>$id));
}
catch(Exception $e)
{
if(YII_DEBUG)
echo $e->getMessage();
// it is too late to log an error message here
return false;
}
return true;
}
}
[/sourcecode]
* Para profundizar ó indagar mas revisen la propia clase en www/yii/framework/web/CDbHttpSession.php y su documentación: http://www.yiiframework.com/doc/api/1.1/CDbHttpSession
* Estoy almacenando el id del usuario que inicia session con Yii::app()->user->id en una entrada anterior pueden indagar sobre la autenticación de usuarios: https://leninmhs.com/yii-autenticacion-last-login/
2 – Indicaremos en protected/config/main.php que usaremos lo que colocamos anteriormente
[sourcecode language=»php»]
‘session’ => array (
‘class’ => ‘application.components.MiCDbHttpSession’,
‘connectionID’ => ‘db’,
‘sessionTableName’ => ‘tblsession’,
),
[/sourcecode]
Seguidos los pasos anteriores y habiendo recorrido nuestro sistema, debemos tener en nuestra base de datos algo similar a esto:
.
Yii Sessions
Una vez almacenadas las sesiones en base de datos pueden autogenerar con gii un modulo de esa tabla y monitorear los usuarios de sus sistemas en tiempo real, crear un par de validaciones y solo permitir una session activa por usuario, tener el histórico de conexiones de los usuarios para nuestra gestión ó la del propio usuario, cerrar la session a usuarios, entre muchas otras posibilidades.
Enlace relacionado:
saludo tienes algo para los pasos en yii pero en los graficos por estado municipio y parroquias ,por lo menos para dar los primeros pasos de echo yo los realices pero me falta conectarme con las parroquias y traerme el total ,.paso para culminar sera que me puedo acercar .pero si en realida hace falta un tutorial detallado para aplicarla