Tienda de productos - Mostrar botón para agregar o quitar del carrito de compras

Carrito de compras con PHP y MySQL

Hoy vamos a ver cómo implementar un carrito de compras con PHP y MySQL. Vamos a poner una especie de tienda o e-commerce con PHP en donde el usuario puede agregar productos al carrito, ver su carrito de compras con el total, y quitar productos del mismo.

Para ello vamos a usar la sesión y MySQL. Con la sesión vamos a identificar al usuario y la gestión del carrito se hará a través de esta base de datos. Ten en cuenta que aquí el punto es el carrito de compras, no una tienda online.

La única desventaja que tendremos es que si el usuario abandona el carrito de compras los datos no serán eliminados, pero esto se puede arreglar implementando todo el carrito como un array en la sesión tal como lo hice en mi sistema de ventas con PHP.

Te dejaré el código completo al final del post, como siempre, gratuito y open source.

(más…)

PHP – Iniciar sesión si no está iniciada

En este corto artículo te mostraré cómo iniciar una sesión de PHP solo si la misma no está iniciada. De este modo podemos invocar a la función que te mostraré sin importar si la sesión ya ha sido iniciada anteriormente, evitando el aviso que dice:

Notice: session_start(): A session had already been started – ignoring in archivo..php on line N.

(más…)

Laravel: establecer manualmente URL “intended”

En este post sobre Laravel aprenderás a modificar o establecer manualmente la URL intended o URL de destino dentro de un middleware.

Por si no lo sabes, la URL de destino (al menos para este contexto) es aquella URL a la que el usuario intentaba acceder antes de que un middleware lo interceptara y redireccionara.

En otras palabras, supongamos que quieres acceder a la url “panel-de-control”. Si no estás logueado, se redirecciona a “login”; en este caso la URL de destino sería “panel-de-control” pues era la URL a la que intentabas acceder.

Lo que veremos será cómo modificar esa URL dentro de un Middleware personalizado.

(más…)

Sesiones en Node con express.js

En este post te mostraré un ejemplo sencillo y claro de cómo manejar la sesión o persistencia de sesión en Node.js usando el framework express.js

Vamos a usar el paquete express-session; y de este modo podremos acceder a los datos de sesión de la petición.

Gracias a la sesión podemos hacer varias cosas. Por ejemplo, restringir el acceso solo a usuarios logueados o llevar algo como un carrito de compras.

(más…)

Datos de sesión con fetch

En este post te mostraré cómo hacer que la sesión persista al usar la fetch API de JavaScript. Pasa que en ocasiones hacemos cosas con la sesión del lado del servidor, pero al usar fetch no se toma en cuenta la sesión.

Por ejemplo, iniciamos sesión con fetch y al querer acceder a un recurso protegido con la sesión, nos dice que no hay datos de sesión o que no estamos logueados.

Te mostraré cómo hacer que la sesión del lado del servidor (lo he probado con PHP, Go y Node.js o bueno JavaScript del lado del cliente) persista al usar fetch.

(más…)

PHP: Saber si sesión está iniciada

Hoy andaba revisando mi sistema de cotizaciones y descubrí un pequeño error al cerrar la sesión que decía:

Notice: session_start(): A session had already been started – ignoring

Abajo del mismo, aparecía lo siguiente:

Warning: Cannot modify header information – headers already sent by (output started at archivo.php)

Así que veremos la solución a ese mensaje de error y también veremos cómo saber si una sesión de PHP está iniciada.

(más…)

Ejemplo y prevención de secuestro o robo de sesión en PHP

Introducción

En la mayoría de nuestras apps escritas en PHP utilizaremos sesiones. Las sesiones sirven para guardar datos que persisten aunque el usuario refresque la página. En este post veremos cómo robar una sesión y cómo prevenirlo.

Las sesiones generan una cookie y con dicha cookie identificamos al usuario. Por ejemplo, si yo inicio sesión se me da la cookie asd123 y si otro usuario inicia, se le da la cookie asd666 (son ejemplos).

Ahora supongamos que el usuario tiene permisos de administrador, y yo no. Pero si le robo su cookie y me la pongo a mí mismo, PHP pensará que soy el usuario administrador.

En otras palabras, inicialmente yo tenía la cookie asd123 y el usuario la asd666. Se la robo y ahora yo tengo la asd666.

Vamos a ver un ejemplo y prevención de secuestro o robo de sesión en PHP

(más…)

Cannot change save handler when session is active

Introducción Trabajando en un pequeño proyecto de PHP me topé con la siguiente advertencia: Warning: session_set_save_handler(): Cannot change save handler when session is active. Este mensaje me tuvo dando vueltas por todo internet sin encontrar una solución, pero probando algunas cosas di con ella y vengo a exponerla. PHP permite implementar Leer más…

Manejador de sesiones propio en PHP y MySQL

Introducción

Vamos a ver hoy cómo implementar un manejador de sesiones en PHP hecho por nosotros mismos para poder entender a fondo cómo funcionan.

Como todos sabemos, PHP provee el uso de sesiones cuya persistencia es lograda a través de archivos en el sistema.

Es decir, guarda y lee los datos de las sesiones en archivos (imaginemos que lo hace en ficheros txt para darnos una pequeña idea).

Esto está bien si no usaremos las sesiones en múltiples peticiones AJAX, en donde puede desatarse una lectura concurrente del archivo, lo que ocasionará bloqueos.

Debido a que PHP bloquea el fichero cuando se está leyendo, si se desea abrir el mismo, se generará un error. Por ello es que hoy veremos cómo implementar nuestro propio manejador de sesiones.

Será implementado en MySQL utilizando PDO. Vamos allá.

(más…)