+34 669126284 jorvidu@gmail.com

Este es uno de los problemas mas comunes cuando estamos peleando con el desarrollo de nuestra tienda online. El usuario llega al producto, le da al botón de comprar, quiere seguir comprando y le da al botón atrás, en ese momento, nuestro script de añadir al carrito rehace la petición y añade el producto de nuevo al carrito. ¡Socorro!. Si bien queremos que compre todo lo que pueda, no podemos dejar este funcionamiento así.

Hay muchas técnicas para evitar esto, habréis escuchado el tema de la caché, de hacer un request para ver de qué página viene, etc… pero todas son engorrosas y no del todo fiables pues dependemos de la configuración de caché tanto del cliente como del servidor donde se aloja nuestra tienda. Por eso os traigo la que creo que es la mejor solución, utilizar variables de sesión. Este ejemplo es perfectamente utilizable en el .

Suponiendo que tengamos 3 páginas para tramitar el concepto de “Añadir al carrito”:

  • A) Página donde veo el producto y tengo el botón de Comprar o añadir al carrito
  • B) Página intermedia que añade el producto a la base de datos (esta página tiene header y no se llega a ver en la navegación)
  • C) Página del carrito donde se muestra la lista de productos que ya ha metido previamente.

Teniendo esto, en la página A) inicializaremos una variable de sesión al valor “1”, este código lo pondremos justo arriba de la página, habitualmente después del include de conexiones y dentro de código PHP:

$_SESSION[“estado”]=1;

En la página B) pondremos un código de forma que si esa variable de sesión es igual a “1”, se producirá el añadido al carrito, en caso de que sea “0”, usaremos un header para redireccionarlo a la página C) o a cualquier otra que deseemos:

if ($_SESSION[“estado”]==0){
header(“Location:carrito_lista.php”);
exit();
} else {
//CÓDIGO DE INSERT O UPDATE DE UN PRODUCTO AL CARRITO
}

Por último, en la página C) y en la misma ubicación que antes hemos hecho en la página A), ponemos el valor de la variable de sesión a “0”:

$_SESSION[‘estado’]=0;

De esta forma y con estos tres sencillos pasos, aunque la persona le de al botón de atrás del navegador, no se introducirá otro producto y nos volverá a la página del carrito_lista.php

Espero que os haya sido útil, cualquier comentario es bienvenido.