Habilitar el componente de sessión y verlas en tiempo real
Obtener las sessiones Activas
Escenario:
En ocaciones es necesario darle mantenimiento a un sistema en producción, muchas veces seleccionamos los horarios en los que no hay usuarios, inclusive podríamos asegurarnos de que no exista ningún usuario en línea para no afectar la operación.
Para estos casos podríamos hacer uso de un que Yii ofrece de manera simple y efectiva.
A continuación se mostrará como habilitar el componente de sessiónes de Yii para poder ver las sessiones en tiempo real.
Paso #1. Habilitar el componente.
Dentro del archivo de configuración "config/web.php", dentro de la sección de componentes:
'session' => [
'class' => 'yii\web\DbSession',
],
Paso #2. Agregar una tabla en la base de datos del proyecto
La cual se debe de llamar y hacer exactamente como aquí se describe, si no puede que no funcione correctamente.
CREATE TABLE session
(
id CHAR(40) NOT NULL PRIMARY KEY,
expire INTEGER,
data BLOB
)
Estos son los campos mínimos que deberá llevar la tabla para que pueda comenzar a funcionar.
Una vez creada la tabla podrás comprobar que funciona cuando entres si te logeas dentro del sistema deberá aparecer algo así dentro de la tabla.
Por cada usuario que se logee se guardará una session, estos son los campos minimos que guarda el componente de forma automática. Hasta aquí es el funcionamiento básico.
Paso #3. Agregar más campos a la sessión
Puedes agregar los campos que quieras guardar, agregando la siguiente función en el componente.
'session' => [
'class' => 'yii\web\DbSession',
'writeCallback' => function ($session) {
return [
'user_id' => Yii::$app->user->id, //Obtiene el ID del usuario que se logeo
'last_write' => FormatDate::getDate() , // Obtiene la fecha y hora, falta darle el timezon
'is_guest' => Yii::$app->user->isGuest, // 0 es logeado y 1 es deslogeado
'ip_remote' => $_SERVER['REMOTE_ADDR']
];
},
],
],
'class' => 'yii\web\DbSession',
'writeCallback' => function ($session) {
return [
'user_id' => Yii::$app->user->id, //Obtiene el ID del usuario que se logeo
'last_write' => FormatDate::getDate() , // Obtiene la fecha y hora, falta darle el timezon
'is_guest' => Yii::$app->user->isGuest, // 0 es logeado y 1 es deslogeado
'ip_remote' => $_SERVER['REMOTE_ADDR']
];
},
],
],
},
Paso #4. Agrega los campos que desees guardar.
CREATE TABLE IF NOT EXISTS `devhabit_sys`.`session` (
`id` CHAR(40) NOT NULL,
`expire` INT(11) NULL,
`data` LONGBLOB NULL,
`user_id` INT NULL,
`last_write` DATETIME NULL,
`is_guest` TINYINT(1) NULL,
`ip_remote` CHAR(15) NULL,
PRIMARY KEY (`id`))
Por lo que basta con mandar el nombre del campo dentro de la configuración de "writeCallback" para actualizar los datos. Cada vez que el usuario se logea en el servidor se ejecutará éste script por lo que se actualizará de inmediato.
Gracias por sus comentarios.
Gracias por sus comentarios.
Fuentes:
http://www.yiiframework.com/doc-2.0/yii-web-dbsession.html
https://github.com/samdark/yii2-cookbook/issues/92
https://github.com/yiisoft/yii2/issues/9438
Comentarios
Publicar un comentario