Я работаю над приложением, в котором размещается несколько вспомогательных приложений, и я хотел бы реализовать автоматический выход из системы после 30 минут бездействия. У меня есть AuthController с логином и выхода из системы действия, отображенные на пользовательские/логин и/выход из системы маршрутов с использованием Bootstrap.php, а также плагином фронт-контроллера, который выглядит следующим образом:Zend Framework Автоматический выход из системы после неактивности
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);
}
}
Я новичок в PHP и Zend , что именно происходит с сеансом через 10 секунд? У меня он установлен для тестирования. Я бы хотел, чтобы время последнего запроса через плагин переднего контроллера было больше 30 минут назад, уничтожить сеанс и вывести пользователя из системы и перенаправить его в/login.
Я вижу, очевидно, что я не отслеживаю время последнего запроса, но я надеюсь, что setExpirationSeconds будет обновляться каждый раз, когда пользователь запрашивает запрос через этот метод preDispatch.
Возможно, необходимо использовать печенье? Мне не нужно фактически инициировать действие выхода из системы, его можно просто обработать при следующем запросе пользователя, если они ничего не сделали за последние полчаса, сеанс был уничтожен, и они вышли из системы, что означает если я уйду в течение 45 минут, мой экран по-прежнему выглядит одинаково, но если я нажму ссылку или попробую отправить форму, которую я получил, она отправит меня в/login. Я могу беспокоиться о некотором предупреждении обратного отсчета JS позже.
Edit: Вот мой самозагрузки, если кто-то хочет видеть его:
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());
}
}
Сначала определите «неактивность». Все, что мы можем видеть в php, - это запросы сервера. Я действительно ненавижу предлагать это, но вы можете использовать javascript для отслеживания активности, а когда он «выйдет из системы» вызывают метод выхода из системы. Имена пространства имен, похоже, не делают то, что вам нужно. – RockyFord
Неактивность означает, что пользователь не получил POST'd формы, они не попадали в действия контроллера. В основном это «Away from Keyboard». Суб-приложения в этих домах довольно управляются данными, поэтому должно быть очевидно, что они не используют приложение, если вещи не попадают в контроллеры (действия). –