2010-12-09 6 views
7

Quiero saber cómo obtener el número de usuarios actualmente en línea o tener sesiones activas en un sitio web usando Zend Framework.Cómo verificar el inicio de sesión de usuarios en línea usando Zend Framework

Intenté la forma habitual de leer la ruta de Guardar sesión, pero no funciona con Zend. ¿Puede alguien aquí sugerirme un buen método para saber cuántas sesiones activas hay en el servidor en cualquier momento?

+0

consulte la publicación actualizada –

Respuesta

2

No puede usar las sesiones para hacer esto, debería almacenar los usuarios en línea en un DB y mostrar todos los que están activos. Al finalizar la sesión, elimine/actualice los registros de db.

o coloque un indicador en la tabla de usuarios ur y actualice el indicador como y/n cada vez que un usuario inicie sesión o cierre sesión.

o algo similar a esto.

Si el usuario cierra el navegador sin cerrar la sesión, la próxima vez que el usuario intente iniciar sesión podrá verificar las sesiones activas anteriores para ese usuario, si es así? dar una ventana al usuario que el último cierre de sesión no fue correcto y tomar cualquier evento de ese usuario para actualizar la hora o puede pedirle al usuario que ingrese el tiempo de cierre (estimado) para la sesión retrasada o si los usuarios no están interesados ​​en seleccionar la hora puede actualizar con un tiempo de cierre de sesión. hacer un intervalo de duración de inicio de sesión difamado.

pensar de esta manera ......

+4

El problema con este método no es que todos los usuarios cierren la sesión cada vez que abandonan el sitio, pueden simplemente cerrar el navegador y salir. En ese caso, no hay forma de que pueda eliminar automáticamente esas sesiones de mi db. Entonces este método básicamente tiene fallas. –

+3

No es defectuoso, puede agregar otra columna 'lastTimestamp' y actualizarla cada vez que compruebe si está conectado, también abre una página nueva, por lo que si el usuario cierra su navegador, tendrá una marca de tiempo anterior para que pueda cerrar sesión esas personas de forma automática a través de cron que se ejecuta cada 30 minutos como un ejemplo – tawfekov

+0

Esta última idea de última hora parece genial, voy a intentarlo esta noche y hacerle saber chicos! –

4

Recientemente tuve ese problema. Resuelto de esta manera:

Por lo general, un controlador es una extensión de Zend_Controller_Action, por ejemplo

class IndexController extends Zend_Controller_Action 

Lo que hicimos en nuestro proyecto era crear un controlador extendida en/Library/ME/Controlador

class ME_Controller_Base extends Zend_Controller_Action 
    public function init() 
    { 
     parent::init(); 
    } 
} 

el uso de este controlador se puede extender todos sus otros controladores de ella - es así, el controlador por defecto anterior va desde

class IndexController extends Zend_Controller_Action 

a

class IndexController extends ME_Controller_Base 

importante, recuerde que debe llamar siempre a los padres :: init() en la sección init() de su controlador (esto es una buena práctica de todos modos)

class IndexController extends ME_Controller_Base 
{ 
    public function init() 
    { 
     parent::init(); 
    } 
} 

Ahora puede agregar cualquier código que desee para el controlador "Base". Como estamos usando Zend_Auth con un objeto de usuario Doctrina, la final de la "base" del controlador se parece a este método

class ME_Controller_Base extends Zend_Controller_Action 
    public function init() 
    { 
     parent::init(); 
     $auth = Zend_Auth::getInstance(); 
     $this->view->user = $auth; 
     $this->user  = $auth; 

     // check auth 
     ... 
     // write an update to say that this user is still alive 
     $this->user->getIdentity()->update(); 
    } 
} 

La actualización() simplemente establece un campo "actualizado" a la fecha actual y elimina el usuario. A continuación, puede seleccionar usuarios que se vieron en los últimos X minutos para mostrar la lista.

+0

Sería mejor agregar un 'controller_action_helper', un complemento o usar el método' postDispatch() 'para que no tenga que' parent :: init() 'cada vez. Además, puedes usar 'postDispatch()' para que tus cosas no se ejecuten cuando estás haciendo una solicitud json/xml. –

1

En lugar de crear un controlador base y extender todos los demás controladores, podemos crear y usar el complemento Zend Front Controller (ver ejemplos here) para registrar todas las solicitudes en nuestro sitio web o aplicación web.

class App_Plugin_RegisterActivity extends Zend_Controller_Plugin_Abstract 
{ 
    public function dispatchLoopShutdown() { 

     // read user identity 
     $auth = Zend_Auth::getInstance(); 
     $authStorage = $auth->getStorage(); 
     $identity = $authStorage->read(); 

     $userID = $identity->id; 

     // update user's table with current timestamp 
     ..... 

    } 
} 

Luego contamos usuarios activos y mucho más.

Cuestiones relacionadas