Pracuję na aplikacji, która mieści kilka aplikacji sub i chciałbym wdrożyć automatycznego wylogowania po 30 minutach bezczynności. Mam AuthController z logowania i wylogowania działania odwzorowanych obyczajowa/login i/tras wylogowania używając bootstrap.php jak również przednim sterownika plugin, który wygląda tak:Zend Framework automatyczne wylogowanie po bezczynności
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);
}
}
Jestem nowym PHP i Zend , co dokładnie dzieje się z sesją po 10 sekundach? Mam go ustawionego na niskim poziomie do testowania. To, co chciałbym mieć, to to, że czas ostatniej prośby za pośrednictwem wtyczki kontrolera frontowego był dłuższy niż 30 minut temu, zniszczyć sesję i zalogować użytkownika i przekierować go do/login.
Widzę oczywiście, że nie śledzę czasu ostatniego żądania, ale miałem nadzieję, że setExpirationSeconds zostanie odświeżony za każdym razem, gdy użytkownik otrzyma żądanie przez tę metodę preDispatch.
Może potrzeby cookies wykorzystywane? Nie muszę faktycznie inicjować akcji wylogowania, może być ona obsługiwana następnym razem, gdy użytkownik wyśle żądanie, jeśli nic nie zrobiło w ciągu ostatniego pół godziny sesja została zniszczona i wylogowano, co oznacza jeśli odejdę na 45 minut, mój ekran będzie wyglądał tak samo, ale jeśli kliknę link lub spróbuję przesłać formularz, który wysłałem, wysyła mnie do/login. Od pewnego czasu mogę się martwić o ostrzeżenie o odliczaniu JS.
Edycja: Oto mój bootstrap jeśli ktoś chce je zobaczyć:
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());
}
}
Najpierw zdefiniuj "brak aktywności". Wszystko, co możemy zobaczyć w php, to żądania serwera. Naprawdę nienawidzę tego sugerować, ale możesz chcieć użyć javascript do monitorowania aktywności, a kiedy "przekroczy limit czasu", wyślij metodę wylogowania. Przestój przestrzeni nazw wydaje się nie robić tego, czego potrzebujesz. – RockyFord
Bezczynność oznacza, że użytkownik nie wysłał formularza POST, nie wykonał czynności w kontrolerze. Zasadniczo są "Z dala od klawiatury". Aplikacje podrzędne tego typu są dość oparte na danych, więc powinno być oczywiste, że nie używają aplikacji, jeśli coś nie uderza kontrolerów (działań). –