我尝试在用户注销时终止浏览器缓存。 我实现了LogoutSuccessHandlerInterface来扩展onLogoutSuccess方法。 没有错误,但是当我退出时,我可以在浏览器中按回按钮,我看到我的profil页面=>如果我刷新此页面,我会自动重定向,因此我正确登出。
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 /处理器/ 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;
}
}
我尝试使用this solution并且效果很好,但是为每个请求调用此方法(每个页面多次)并导致速度减慢。 请帮忙!
THX
答案 0 :(得分:0)
试试这个,对我有用。
<?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 }
答案 1 :(得分:-1)
我已经成功使用的方法只是在注销后重定向到上一页。如果上一页受到保护,您的身份验证系统将重定向回登录页面。现在当你按下后退按钮时,你应该再次点击登录页面。
在这里查看我在Laravel中的示例: https://laracasts.com/discuss/channels/requests/back-button-browser