Estoy un poco confundido sobre cuál debería ser mi enfoque, trabajando en un diseño de carrito de compras y necesito almacenar el carrito de compras ya sea en sesión o en la base de datos, pero no estoy seguro de qué enfoque sería el mejor.
- El usuario no está conectado y agrega producto al carrito (usuario anónimo)
- El usuario ha iniciado sesión y agrega producto al carrito.
El primer caso es más confuso para mí, ya que puede haber muchos casos en los que el usuario simplemente visita la tienda web y agrega productos sin iniciar sesión, y puede ser muy posible que no vaya a un proceso de pago.
Pero aún necesitamos crear un carrito de compras para este usuario, para crear y guardar el carrito de compras tengo dos opciones.
- Cuando el usuario agregue un producto, cree un carrito en la base de datos y asocie este carrito con este usuario, en el momento en que ingrese, mueva este carrito al usuario conectado.
- Cree el carrito, agregue el producto y guárdelo en la sesión, cuando el usuario haya iniciado sesión, cree el carrito en la base de datos y el usuario conectado asociado con este carrito con el usuario.
Sé que tanto el sistema de carrito basado en bases de datos como el basado en sesión pueden tener aspectos positivos y negativos, pero no estoy seguro de cuál podría ser el mejor enfoque para tener en cuenta los siguientes puntos
- Escalabilidad
- Flexibilidad
- Extensibilidad
- La aplicación debe cuidar la velocidad
Buscando aportes sobre este aspecto para decidir el camino.
fuente
Respuestas:
Buscaría una solución en la que se asigne una identificación única a todos los visitantes cuando accedan por primera vez al sitio. No importa si son anónimos o autenticados. Cuando los usuarios anónimos se registren, conserve la identificación única.
Almacene el carrito de compras en la base de datos. El almacenamiento es barato, y no debería ser un problema de rendimiento hacer una consulta del carro de vez en cuando.
fuente
Ambos métodos tienen ventajas y desventajas, pero desde mi punto de vista, el almacenamiento de la base de datos tiene dos ventajas bastante grandes.
fuente
La pregunta es asumir que necesita sesiones en absoluto que en mi mercado de clientes no es necesario. Ejecuto varios cientos de sitios web de comercio electrónico y un puñado de ellos está recibiendo mucho tráfico. No utilizamos sesiones nunca, ya que no son escalables a menos que sean cultivadas, entonces son más lentas o requieren más configuración. Las sesiones usan memoria y la recuperación de la base de datos del estado de la sesión es muy lenta y requiere más partes móviles.
En su lugar, usamos HTML5 sessionStorage para conservar cualquier información de usuario que necesitemos extraer una y otra vez, pero sin necesidad de un recorrido de cookies cada vez que aumente el ancho de banda. Este es IE8 + y todos los demás navegadores y dispositivos móviles modernos son compatibles con esta tecnología. PERO podría almacenar fácilmente el carrito en una cookie como reserva, ya que esto es lo que hicimos anteriormente. Aquí hay un buen carrito de galletas: http://simplecartjs.org/
Cuando los usuarios inician sesión o inician sesión, utilizamos una cookie cifrada con una marca de tiempo incorporada.
También nos estamos moviendo hacia el uso de ApplicationCache donde corresponda, lo que reducirá aún más el tráfico web como nota al margen, ya que puede captar recursos e incluso catalogar datos, por lo que la perspectiva del usuario será un sitio web de carga súper rápida y el móvil también funcionará sin conexión (menos transacciones). Por supuesto, debe tener cuidado de actualizar el manifiesto cuando los productos cambien, etc.
fuente
Asume que el almacenamiento de la sesión y el almacenamiento de la base de datos son exclusivos. No lo son Pero comencemos asumiendo que lo son.
La ventaja del almacenamiento de la sesión es triple:
Desventajas del almacenamiento de la sesión:
Ventajas del almacenamiento de la base de datos:
Desventajas del almacenamiento de la base de datos:
No mencionaste qué plataforma estás utilizando. Buscaría un enfoque que utilice una sesión respaldada por una base de datos en la que los datos de la sesión solo existan en la memoria durante la vida de un ciclo de solicitud / respuesta, cargándola de la base de datos y volviendo a guardarla en la base de datos. Esto me ha servido bien en el pasado.
Ventajas de una sesión respaldada por base de datos:
Desventajas de una sesión respaldada por base de datos:
Hay una tercera posibilidad, que alguien mencionó anteriormente. Puede omitir el uso de sesiones por completo y usar el almacenamiento del lado del cliente incrustando todo en una cookie o almacenamiento local html.
Dejaré los pros / contras de eso como un ejercicio para usted, pero le daré una pista de que para el almacenamiento html5, la compatibilidad del navegador puede ser algo que revise cuidadosamente.
He esbozado los hechos para ti. Esperemos que esto le ayude a tomar la decisión correcta para su situación.
fuente
Consideremos los dos casos de uso que ha mencionado
En este caso, definitivamente desea guardar la información del carrito del usuario en una sesión para servir bien al usuario durante su sesión. Si él / ella decide iniciar sesión / crear una cuenta, puede manejar esto en función del próximo caso de uso. Si él / ella no inicia sesión, no es necesario que complete su base de datos con la información de este usuario invitado, ya que solo se utilizó para servir al invitado durante la sesión. Estos datos se pueden manejar sin estado, es decir, no se guarda el estado de una sesión a otra.
En este caso, puede manejarlo de la misma manera que antes (sitios de comercio electrónico de la vieja escuela) y también agregar esta información a la base de datos y asociarla con el usuario. Esto se utiliza principalmente para proporcionar información con estado (estado guardado de una sesión a otra), como "Historial de navegación del producto", "Recomendaciones", etc., es decir, similar a Amazon.com.
Cosas para pensar:
fuente
Vaya a la sesión cuando el usuario no haya iniciado sesión. Incluso cuando haya iniciado sesión, cree primero el carrito en la sesión y guárdelo en la base de datos solo cuando el usuario cierre sesión o la sesión finalice.
Debe controlar el número de carros que se crean en la sesión.
fuente