Symfony2 — выход из системы и очистка кеша + кнопка предотвращения возврата

Я пытаюсь убить кеш браузера при выходе пользователя из системы.
Я реализую интерфейс 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;
}
}

Я пытаюсь с это решение и это прекрасно работает, но этот метод вызывается для каждого запроса (много раз для каждой страницы) и вызывает замедление.
Пожалуйста помоги!

Спасибо

3

Решение

Попробуйте это, у меня работает.

<?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 }
0

Другие решения

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

Смотрите мой пост здесь для примера в Laravel:
https://laracasts.com/discuss/channels/requests/back-button-browser

-1

По вопросам рекламы [email protected]