Sessions en base de datos con Yii

Yii +Session + Database +Users + Ip

CDbHttpSession es la clase encargada en Yii de proveer almacenamiento de las sesiones en base de datos.

en el archivo protected/config/main.php colocaremos dentro de la sección ‘components’

'session' => array (
    'class' => 'system.web.CDbHttpSession',
    'connectionID' => 'db',
    'sessionTableName' => 'tblsession',
),

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á:

<?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;
}
}

* 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.wordpress.com/2012/08/26/yii-autenticacion-last-login/

2 – Indicaremos en protected/config/main.php que usaremos lo que colocamos anteriormente

'session' => array (
    'class' => 'application.components.MiCDbHttpSession',
    'connectionID' => 'db',
    'sessionTableName' => 'tblsession',
),

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

.

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.

Enlaces relacionados:

Using Sessions with the Yii Framework

Configuring Session in Yii Framework – CDbHttpSession

Anuncios

Un 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

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s