Codeigniter – Obligar a cargar página sin utilizar caché

Seguro que no soy el primero que tiene problemas con el dichoso botón atrás del navegador. Veamos en CodeIgniter cómo obligar a cargar la página sin utilizar la caché.

En varias ocasiones, necesitaremos que una página no se guarde en caché. El tipo ejemplo es cuando vamos de una página a otra, y pulsamos posteriormente el botón Atrás del navegador. Este problema surge en muchísimas ocasiones por temas de loguinación, pasarelas de pago… vamos:

El problema del botón atrás del navegador y la seguridad

En Codeigniter podemos utilizar un método que obliga a que obliguemos a cargar siempre del servidor, sin utilizar la caché del navegador:

class MiControlador extends CI_Controller {
  ...

  public function verpaginasincache(){
    ...
    // En el controlador, antes de cargar el view dentro de una función
    $data["mensaje"]= "Un ejemplo para que el navegador no utilice caché y obligue siempre a cargar la página desde el servidor";
    // Evitamos cache para que no puedan hacer botón atrás desde la siguiente página
    $this->output->set_header('Expires: Sat, 26 Jul 2000 05:00:00 GMT');
    $this->output->set_header('Cache-Control: no-cache, no-store, must-revalidate, max-age=0');
    $this->output->set_header('Cache-Control: post-check=0, pre-check=0', FALSE);
    $this->output->set_header('Pragma: no-cache');
    // Cargamos la vista en cuestión
    $this->load->view('lavistasincache', $data);
    ...
  }

  ...
}

De esta manera, cada vez que llamemos a esta función del controlador, obliga a cargarlo desde el servidor y no utilizará la caché del navegador. Para ello, hemos utilizado las función set_header de la librería Output, que cambia los headers de la página comunicando al navegador que no las guarde.

Como siempre, la caché nos puede acelerar la aplicación, pero por otro lado, puede complicarnos la vida si el usuario vuelve atrás y se cargan páginas que no debe.

Espero que os haya sido de utilidad para saber cómo obligar a cargar la página sin utilizar la caché en CodeIgniter.


Más información