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']                       
                    ];
                },
            ],
        ],
                },

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.



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

Aprende Yii2


Lo más Visto

Tutorial de implementación de calendario de rango de fechas con Karkit en gridView

Guía rápida para uso de widget kartik para select para formulario

Cómo incluir una vista dentro de un modal

Google Plus desaparecerá el 4 de Abril de 2019

Crear fomulario HTML con checkbox sin Active Record

hostinger

ventana bienvenida