Sto lavorando a un'applicazione che ospita diverse applicazioni secondarie e vorrei implementare un logout automatico dopo 30 minuti di inattività. Ho un AuthController con Accesso e uscita azioni mappati custom/login e percorsi/logout utilizzando il bootstrap.php così come un plugin front controller che assomiglia a questo:Zend Framework Logout automatico dopo inattività
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);
}
}
Sono nuovo di PHP e Zend , cosa sta succedendo esattamente alla sessione dopo 10 secondi? Ho messo basso per il test. Quello che mi piacerebbe che succedesse è se il tempo dell'ultima richiesta attraverso il plugin del front controller era superiore a 30 minuti fa, distruggi la sessione e logga l'utente e reindirizzalo su/login.
Posso vedere chiaramente che non sto seguendo il tempo dell'ultima richiesta, ma la mia speranza era che il setExpirationSeconds sarebbe stato aggiornato ogni volta che l'utente ha ricevuto una richiesta attraverso questo metodo preDispatch.
Forse un cookie deve essere utilizzato? Non ho bisogno di avviare realmente un'azione di disconnessione, può essere gestita solo la prossima volta che l'utente fa una richiesta, se non hanno fatto nulla nell'ultima mezz'ora la sessione è stata distrutta e sono stati disconnessi, il che significa se esco per 45 minuti il mio schermo sembra sempre lo stesso, ma se clicco su un link o provo a inviare un modulo che ho ricevuto, mi manda a/login. Posso preoccuparmi di qualche tipo di avviso per il conto alla rovescia di JS in seguito.
Edit: Ecco il mio bootstrap se qualcuno vuole vederlo:
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());
}
}
Prima definire "inattività". Tutto quello che possiamo vedere in php sono le richieste del server. Odio davvero suggerire questo, ma si consiglia di utilizzare javascript per monitorare l'attività e quando 'timeout' chiama il metodo di logout. La scadenza dello spazio dei nomi non sembra fare ciò di cui hai bisogno. – RockyFord
L'inattività indica che l'utente non ha eseguito il POST di un modulo, non ha eseguito azioni nel controller. Fondamentalmente sono "Lontano dalla tastiera". Le applicazioni secondarie di questo case sono piuttosto guidate dai dati, quindi dovrebbe essere evidente che non stanno usando l'applicazione se le cose non stanno colpendo i controller (azioni). –