кнопка «назад» возвращает пользователя на защищенную страницу после выхода из системы -zend framework

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

Проблема заключается в кеше браузера, я пытался использовать как php-заголовок, так и html-мета, чтобы предотвратить кэширование страницы, но мне это не удалось. Любое решение для этого?

Мой код действия выхода из системы выглядит следующим образом

public function logoutAction()
      {   
         $auth=Zend_Auth::getInstance();
      //If logged in then move to index
         if(!$auth->hasIdentity()){
           $this->_redirect('admin/account/redirect');

      }
         $auth->clearIdentity();
      $this->_redirect('admin/account/redirect');

   }   

person Amir s    schedule 09.03.2011    source источник
comment
Мне кажется, что вы правы, сосредоточившись на кэшировании браузера. Как вы заметили, если он перезагрузит одну из этих страниц, сработает ваша проверка авторизации и перенаправит его для входа в систему. Я бы сосредоточил внимание на исправлении заголовков без кеша, которые вы отправляете для страниц, на которых вы не хотите кэшировать.   -  person David Weinraub    schedule 10.03.2011


Ответы (4)


Вы всегда можете запустить фрагмент javascript onLoad, который запрашивает другую страницу PHP с использованием AJAX, а затем, если пользователь вошел в систему, перенаправить их обратно на CPanel или страницу входа, где бы они ни находились.

Сообщение JQuery справится с этим довольно хорошо. http://api.jquery.com/jQuery.post/

person NikoRoberts    schedule 09.03.2011
comment
Я собираюсь попробовать это. Спасибо - person Amir s; 10.03.2011
comment
Niko, я пробовал это, и проблема в том, что поскольку страница уже загружена и кэширована браузером, он не собирается снова загружать страницу, поэтому onLoad не поможет! - person Amir s; 10.03.2011
comment
Я не пробовал с Zend, но я работаю с PHP и javascript. Не должно быть причин, по которым вы не можете использовать javascript для запроса переменной сеанса из другого PHP-скрипта, и если вы получите определенную переменную, перенаправьте браузер на другую страницу. Независимо от того, кэширована страница или нет, это не должно иметь значения. - person NikoRoberts; 11.03.2011

Браузеры могут вести себя по-разному, так какой браузер вы используете?

Кроме того, зачем проверять, есть ли у пользователя личность при выходе из системы? Просто очистите личность независимо от того, вошел ли пользователь в систему или нет - меньше кода, тем лучше...

Мой код выхода выглядит так:

    $auth = Zend_Auth::getInstance();
    $auth->clearIdentity();
    $this->_redirect('/identity/login');
person robertlbolton    schedule 10.03.2011
comment
Спасибо, я использую сафари. Я не проверял это ни в одном браузере, но кажется, что моя страница кэшируется браузером, и он не выполняет php-код для проверки экземпляра аутентификации и перенаправляет пользователя на страницу входа. - person Amir s; 10.03.2011
comment
Извините, я не могу воссоздать проблему с Safari на своем сайте с помощью Zend_Auth, поэтому не знаю, в чем проблема. Использование JavaScript может быть вашим единственным вариантом, при условии, что весь ваш PHP-код правильный. - person robertlbolton; 13.03.2011

Это то, что у меня есть в моем действии выхода из системы

Zend_Session::destroy();
$this->_helper->redirector('index', 'index');

А поскольку идентификатор Zend_Auth сохраняется в сеансе, он также уничтожается. Если делаю бэк (из навигатора) ловится отсутствие идентификаций и меня перенаправляет на экран логина

person JF Dion    schedule 09.03.2011
comment
Наконец, я нашел, в чем проблема, я попробовал приложение в Chrome, и оно перенаправляло меня для входа в систему, если я попытаюсь нажать кнопку «Назад» сейчас, но в Safari этого не произошло, потому что кеш, как я уже догадался, тогда я отключил кеширование из Develop › Disable Caches и теперь работает как надо. Интересно, есть ли хорошее решение для этого! - person Amir s; 11.03.2011

Метод, который я бы использовал, - заставить страницу входа в систему происходить в новом экземпляре окна. Когда пользователь выйдет из системы, закройте это окно. Возвращаться будет не к чему.

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

person Andrew    schedule 10.03.2011