Ну, я читал sfGuardSecurityUser, и он расширяет класс sfBasicSecurityUser, который обрабатывает аутентификацию пользователя, профиль, учетные данные и т. Д.
Итак, я нашел функцию в sfBasicSecurityUser, которая определяет, рассчитана ли сессия пользователей по времени, называется isTimedOut, а также setTimedOut.
Если вы хотите что-то сделать, когда время сеанса пользователя истекло, по крайней мере, на стороне сервера, вы должны прослушать событие, которое выбрасывается, когда это происходит. Проверьте этот метод:
это можно найти в symfony_core_root_dir / lib / user / sfBasicSecurityUser.class.php
public function initialize(sfEventDispatcher $dispatcher, sfStorage $storage, $options = array())
{
// initialize parent
parent::initialize($dispatcher, $storage, $options);
if (!array_key_exists('timeout', $this->options))
{
$this->options['timeout'] = 1800;
}
// force the max lifetime for session garbage collector to be greater than timeout
if (ini_get('session.gc_maxlifetime') < $this->options['timeout'])
{
ini_set('session.gc_maxlifetime', $this->options['timeout']);
}
// read data from storage
$this->authenticated = $storage->read(self::AUTH_NAMESPACE);
$this->credentials = $storage->read(self::CREDENTIAL_NAMESPACE);
$this->lastRequest = $storage->read(self::LAST_REQUEST_NAMESPACE);
if (null === $this->authenticated)
{
$this->authenticated = false;
$this->credentials = array();
}
else
{
// Automatic logout logged in user if no request within timeout parameter seconds
$timeout = $this->options['timeout'];
if (false !== $timeout && null !== $this->lastRequest && time() - $this->lastRequest >= $timeout)
{
if ($this->options['logging'])
{
$this->dispatcher->notify(new sfEvent($this, 'application.log', array('Automatic user logout due to timeout')));
}
$this->setTimedOut();
$this->setAuthenticated(false);
}
}
$this->lastRequest = time();
}
На стороне клиента вы можете начать думать о HTML 5 и Javascript Workers . Идея может заключаться в том, чтобы установить работника при загрузке страницы и заставить его считать до session_time_out, а затем перенаправить на страницу входа или что-то в этом роде.