Как определить время ожидания сеанса в Symfony

В настоящее время я работаю над проектом с PHP-фреймворком Symfony. Я настроил защищенные страницы, определил 30 минут для тайм-аута сеанса и установил страницу, на которую пользователь должен быть перенаправлен, если пользователь, не прошедший проверку подлинности, попытается получить доступ к защищенной странице.

Я заметил, что пользователь также перенаправляется туда, если пользователь пытается получить доступ к защищенной странице после истечения срока действия сеанса пользователя. В этом случае я хотел бы отобразить сообщение, в основном говорящее: «Ваш сеанс истек. Пожалуйста, переподключитесь».

Как я мог этого добиться?


person Pattchen    schedule 04.12.2009    source источник


Ответы (2)


Вы можете установить файл cookie при каждой успешной аутентификации. Затем, если сессия пуста, но файл cookie присутствует, вы говорите: «Сеанс истек».

Другой, более уродливый способ, который будет работать даже с отключенными файлами cookie: всегда добавляйте идентификатор сеанса к URL-адресу. Затем, опять же, если он присутствует в URL-адресе, но сеанс пуст, мы находимся в ситуации истечения срока действия.

person Ivan Krechetov    schedule 04.12.2009
comment
Я бы предпочел реализовать его как фильтр - person Andrei Dziahel; 04.12.2009

Намного проще проверить myUser->timedout.

http://trac.symfony-project.org/changeset/1722

В Symfony 1.4 нет этого метода, но вы можете его создать:

class myUser extends sfBasicSecurityUser
{
   // ...   
   public function getTimedOut() 
   {
       return $this->timedout;
   }
   // ...
}

Атрибут timeout заполнен правильно.

Затем проверьте его значение в своем шаблоне:

<?php if($sf_user->getTimedOut()) : ?>
    <div class="error">Session timeout...</div>
<?php endif ?>   
person binarious    schedule 03.06.2011