yii framerwork

Sessions en base de datos con Yii

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

yii sessions
Sessions creadas en Yii y almacenadas en PostgreSQL

.

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 +Session + Database +Users + Ip
Yii +Session + Database +Users + IP

.

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:

Using Sessions with the Yii Framework

1 comentario en “Sessions en base de datos con Yii”

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *