Laravel 5.x middleware manage ''Cache-Control:no-cache'' phòng ngừa browser back button
Trong bài viết này mình giới thiệu về cách quản lý cache-control khi bạn ấn nút back trên browser trong laravel 5.x Nếu bạn không phòng chống cache-control thì có thể xảy ra nhiều lỗi Khi logout ra rồi ấn nút back thì vẫn hiển thị ra màn hình khi chưa logout Javascript bị cache, ấn nút back ...
Trong bài viết này mình giới thiệu về cách quản lý cache-control khi bạn ấn nút back trên browser trong laravel 5.x Nếu bạn không phòng chống cache-control thì có thể xảy ra nhiều lỗi
- Khi logout ra rồi ấn nút back thì vẫn hiển thị ra màn hình khi chưa logout
- Javascript bị cache, ấn nút back lại có thể bị lỗi vv...
Thực ra bản chất của vấn đề chỉ là cache browser, bạn có thể thiết lập quản lý cache vào trong html, hoặc php để handler điều khiển cache Trong laravel 5x, mình sẽ giới thiệu cách sử dụng middleware để hanlder Cache-Control
Create new middleware
php artisan make:middleware AllowCache
Code in middleware
<?php namespace AppHttpMiddleware; use Closure; /** * Modify request header * * @ copyright Copyright (c) 2017 ngo.dinh.ngoc */ class AllowCache { /** * Handle an incoming request. * * @param Request $request * @param Closure $next * @return mixed */ public function handle($request, Closure $next) { $response = $next($request); if (!$response->isRedirect()) { // TODO https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control $response->header('Cache-Control: no-cache, no-store, must-revalidate', true); } return $response; } }
Register middleware
Đăng ký theo path sau /app/Http/Kernel.php
protected $middleware = [ IlluminateFoundationHttpMiddlewareCheckForMaintenanceMode::class, IlluminateFoundationHttpMiddlewareValidatePostSize::class, AppHttpMiddlewareTrimStrings::class, IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull::class, AppHttpMiddlewareTrustProxies::class, AppHttpMiddlewareAllowCache::class, ];
Summary
Trên là cách handle cache-control trong laravel trong dự án, tuy nhiên với những response mà trả về kiểu BinaryFileResponse bạn nên để cache cho nó!
Bạn có thể xem code mẫu ở đây https://github.com/ngodinhngoc/laravel_tip/commit/76cfb9231e9802f9a37f213ad05cdc35155488f8