我最近碰到這個小問題來了,與一對夫婦的帖子的幫助下,我想出了以下解。
要在此處說明問題,註銷安全區域後,我們希望通過單擊後退按鈕來防止再次查看任何受保護的先前頁面。爲此,這些先前的頁面不得存儲在客戶端緩存中。我們需要攔截每個Symfony頁面響應,檢查它是否爲受保護的頁面,如果是,請將標題設置爲返回no-cache。
步驟一,建立一個響應監聽器類:
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
class ResponseListener
{
public function onKernelResponse(FilterResponseEvent $event)
{
$request = $event->getRequest();
if ($this->disableThisPageCache($request->getPathInfo())) {
$headers = $event->getResponse()->headers;
$headers->set('Cache-Control', 'no-cache, no-store, must-revalidate'); // HTTP 1.1.
$headers->set('Pragma', 'no-cache'); // HTTP 1.0.
$headers->set('Expires', '0'); // Proxies.
}
}
private function disableThisPageCache($currentPath)
{
$paths = array('/admin', '/customer');
foreach ($paths as $path) {
if ($this->checkPathBegins($currentPath, $path)) {
return true;
}
}
return false;
}
private function checkPathBegins($path, $string)
{
return substr($path, 0, strlen($string)) === $string;
}
}
步驟2,它註冊爲一個服務:
app.filter_response_listener:
class: AppBundle\EventListener\ResponseListener
tags:
- { name: kernel.event_listener, event: kernel.response }
步驟3,設置$paths
陣列包含您的應用程序的安全路徑。如果您需要了解這些信息,請查看access_control部分下的security.yml文件。
使用Symfony Security服務,可能有更好的方法檢查頁面是否位於安全區域,但此解決方案適用於我的應用程序。
感謝這些職位,幫助我:
不註銷必須在防火牆的後面?當你點擊瀏覽器然後刷新頁面時會發生什麼? –
註銷後,如果我點擊瀏覽器後退按鈕我可以回到 相同的頁面,但如果我刷新它註銷我 但我想它不應該讓我回到第一位! –