簡體   English   中英

Symfony2 - 注銷並清除緩存+阻止后退按鈕

[英]Symfony2 - Logout and clear cache + prevent back button

我嘗試在用戶注銷時終止瀏覽器緩存。 我實現了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;
  }
}

我嘗試使用這個解決方案並且完美地運行,但是為每個請求調用此方法(每個頁面多次)並導致速度減慢。 請幫忙!

謝謝

試試這個,對我有用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM