Estoy trabajando en una aplicación que contiene varias aplicaciones secundarias y me gustaría implementar una desconexión automática después de 30 minutos de inactividad. Tengo una AuthController con inicio de sesión y cierre de sesión acciones asignadas a la costumbre/rutas de acceso y/cierre de sesión utilizando el Bootstrap.php, así como un plugin controlador frontal que tiene este aspecto:Zend Framework Cierre de sesión automático después de la inactividad
class Plugin_SessionTrack extends Zend_Controller_Plugin_Abstract {
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$employeeSession = new Zend_Session_Namespace('employeeSession');
$employeeSession->setExpirationSeconds(10);
}
}
Soy nuevo en PHP y Zend , ¿qué está pasando exactamente con la sesión después de 10 segundos? Lo tengo bajo para probar. Lo que me gustaría que sucediera es que si la última solicitud a través del complemento del controlador frontal fue hace más de 30 minutos, destruya la sesión, cierre la sesión del usuario y rediríjalo a/login.
Veo, obviamente, que no estoy rastreando el momento de la última solicitud, pero esperaba que el setExpirationSeconds se actualizara cada vez que el usuario tuviera una solicitud para este método preDispatch.
¿Se necesita una cookie? No necesito iniciar realmente una acción de cierre de sesión, solo se puede manejar la próxima vez que el usuario haga una solicitud, si no han hecho nada en la última media hora, la sesión se destruye y se desconectan, lo que significa si me alejo durante 45 minutos, mi pantalla aún se ve igual, pero si hago clic en un enlace o intento enviar un formulario que tenía arriba, me envía a/login. Me puedo preocupar por algún tipo de advertencia de cuenta atrás JS más tarde.
Editar: Aquí está mi rutina de carga si alguien quiere verlo:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
/**
* Custom routes:
*
* /login
* /logout
*/
protected function _initRoutes()
{
$router = Zend_Controller_Front::getInstance()->getRouter();
$loginRoute = new Zend_Controller_Router_Route('login', array('controller' => 'auth', 'action' => 'login'));
$logoutRoute = new Zend_Controller_Router_Route('logout', array('controller' => 'auth', 'action' => 'logout'));
$routesArray = array('login' => $loginRoute, 'logout' => $logoutRoute);
$router->addRoutes($routesArray);
}
protected function _initPlugins()
{
$frontController = Zend_Controller_Front::getInstance();
$frontController->registerPlugin(new Plugin_SessionTrack());
}
}
Primero defina 'inactividad'. Todo lo que podemos ver en php son las solicitudes del servidor. Realmente odio sugerir esto, pero es posible que desee utilizar javascript para controlar la actividad y cuando se agote el tiempo, llame al método de cierre de sesión. La expiración del espacio de nombres no parece hacer lo que necesita. – RockyFord
Inactividad significa que el usuario no ha enviado un formulario, no ha estado presionando acciones en el controlador. Básicamente están "lejos del teclado". Las aplicaciones secundarias de esta casa son bastante impulsadas por los datos, por lo que debería ser evidente que no están utilizando la aplicación si las cosas no están golpeando los controladores (acciones). –