[How2Tips] How to force the refresh of a page after after hitting the back button?

Most of the time the browser will display the previous page from the cache without making a request to the server.
Actually it’s not a problem except in the case where the user has just completed a complicated multi-page wizard or checkout process and then hits the back button.

In order to prevent the user to load a previous page state, the solution is to add specific `Cache-Control` headers to the targeted pages:

Cache-Control: no-cache, max-age=0, must-revalidate, no-store

For example with Symfony, you can select specific routes and apply the desired headers thanks to the event kernel.response.

namespace App\Symfony\EventListener;

use Symfony\Component\HttpKernel\Event\FilterResponseEvent;

class NoCacheListener
{
    /**
     * @param FilterResponseEvent $event
     */
    public function onKernelResponse(FilterResponseEvent $event)
    {
        $route = $event->getRequest()->attributes->get('_route');

        if (!in_array($route, ['app_front_cart_show', 'app_front_orders_flow_display'])) {
            return;
        }

        $response = $event->getResponse();
        $response->setMaxAge(0);
        $response->headers->addCacheControlDirective('must-revalidate');
        $response->headers->addCacheControlDirective('no-store');
        $response->headers->addCacheControlDirective('no-cache');
    }
}

Source: Matt Brictson’s article