Я пытаюсь убить кеш браузера при выходе пользователя из системы.
Я реализую интерфейс LogoutSuccessHandlerInterface для расширения метода onLogoutSuccess.
Нет ошибки, но когда я выхожу из системы, я могу нажать кнопку «Назад» в браузере, и я вижу свою профильную страницу => Если я обновляю эту страницу, я автоматически перенаправляюсь, поэтому я правильно вышел из системы.
security.yml
logout:
path: /logout
target: /
invalidate_session: true
success_handler: project_user.handler.logout_handler
services.yml
project_user.handler.logout_handler:
class: Project\UserBundle\Handler\LogoutHandler
Проект / UserBundle / Handler / LogoutHandler.php
<?php
namespace Project\UserBundle\Handler;
use Symfony\Component\Security\Http\Logout\LogoutSuccessHandlerInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
class LogoutHandler implements LogoutSuccessHandlerInterface
{
public function onLogoutSuccess( Request $request )
{
$response = new RedirectResponse( '/' );
$response->headers->addCacheControlDirective( 'no-cache', true );
$response->headers->addCacheControlDirective( 'max-age', 0 );
$response->headers->addCacheControlDirective( 'must-revalidate', true );
$response->headers->addCacheControlDirective( 'no-store', true );
return $response;
}
}
Я пытаюсь с это решение и это прекрасно работает, но этот метод вызывается для каждого запроса (много раз для каждой страницы) и вызывает замедление.
Пожалуйста помоги!
Спасибо
Попробуйте это, у меня работает.
<?php
namespace YourBundle;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
class KernelSubscriber implements EventSubscriberInterface {
public static function getSubscribedEvents() {
return array(
KernelEvents::RESPONSE => array(
array('clearBrowserCache', 434255),
),
);
}
public function clearBrowserCache(FilterResponseEvent $event) {
$response = $event->getResponse();
$response->headers->addCacheControlDirective('no-cache', true);
$response->headers->addCacheControlDirective('max-age', 0);
$response->headers->addCacheControlDirective('must-revalidate', true);
$response->headers->addCacheControlDirective('no-store', true);
}
}
services.yml
kernel_subscriber:
class: YourBundle\KernelSubscriber
tags:
- { name: kernel.event_subscriber }
Метод, который я использовал с некоторым успехом, заключается в простом перенаправлении на предыдущую страницу после выхода из системы. Если предыдущая страница была защищена, ваша система авторизации будет перенаправлена обратно на страницу входа. Теперь, когда вы нажимаете кнопку «Назад», вы должны снова зайти на страницу входа.
Смотрите мой пост здесь для примера в Laravel:
https://laracasts.com/discuss/channels/requests/back-button-browser