php - sencillo - carrito de compras para usuarios no registrados
construyendo un carro de compras con php y mysql (6)
Rastreando a un usuario. Use un GUID codificado en una cookie con un vencimiento de n años.
Almacenamiento de una bolsa de compras. No desea almacenar la bolsa en la cookie, principalmente debido a su posible tamaño. Esto deja la opción de persistirlo a un medio y recuperarlo del medio. Usar cualquier cosa, excepto una base de datos para esto, sería como retroceder en el tiempo, las bases de datos son excelentes para almacenar y recuperar datos.
Administrando tu bolso de compras. Ahora, la cuestión de su esquema, en primer lugar, si va a ejecutar consultas contra los bolsos de compras en la base de datos (es decir, cuántos bolsos de compras contienen el artículo x ) probablemente desee un esquema relacional tradicional. Sin embargo, esto tiene gastos generales en términos de inserción. actualizar, seleccionar (y unir) y eliminar datos de la bolsa (en algún momento tendrás bolsas que nunca volverán a usarse, pero que ocupan un espacio valioso en el disco). Con un sitio ocupado, esta es una buena cantidad de Traranactions por segundo, pero cualquier base de datos debería ser capaz de hacer frente. Si no necesita consultar los bolsos de compras en la base de datos, puede almacenarlos como XML. Simplemente serialice la bolsa y colóquela en una tabla, con el PK como GUID tal como está almacenado en la cookie del usuario. Esto sería mucho más rápido que un esquema tradicional, además de que siempre podría romper el XML en el futuro si surgiera un requisito para un esquema relacional.
Esto es lo que hacemos (Xml Bag), y tenemos más de un millón de clientes.
Estoy en el proceso de crear un sitio web que involucra un carrito de compras. Hay dos requisitos principales:
Los chicos de experiencia de usuario quieren que el inicio de sesión / autenticación sea el último paso en todo el flujo de trabajo. El usuario puede hacer todas las compras y solo se le solicita que inicie sesión al momento de pagar.
El carrito de la compra no debe caducar (ni siquiera en el navegador cerrado) a menos que el usuario (registrado o no) realice el check-out.
En el contexto anterior, tengo la siguiente pregunta con respecto al mantenimiento del estado del carrito:
¿Debería ir con sesiones basadas en archivos o bases de datos? Tenga en cuenta que esto sería para usuarios no registrados. Mi aprensión es que terminaré teniendo muchos registros en la base de datos.
Otra opción parece ser colocar el contenido del carro en una cookie encriptada, pero luego hay una limitación de tamaño en el archivo de la cookie.
Qué haría usted en este caso ? Realmente apreciaría tus respuestas.
Almacene en las cookies el AnonymousSessionID, con el que asocia un carrito de compras en la base de datos.
Luego, tendrá una tarea de programador para borrar sesiones anónimas después de un tiempo (por ejemplo, un día). Esto mantendrá su base de datos limpia de sesiones abandonadas.
Si un usuario se registra, reasociará su carrito de compras con su cuenta de forma permanente. Si los usuarios hacen un pedido, vacías su carrito de compras.
Con esas especificaciones iría con un estado de sesión basado en la base de datos. Pero debe leer detenidamente cómo se maneja el estado de la sesión en su servidor web de su elección. Dado que desea poder revivir el estado a la persona correcta.
Creo que tiene algunas expectativas que gestionar, o tal vez no tenía claros los requisitos.
- Los chicos de experiencia de usuario quieren que el inicio de sesión / autenticación sea el último paso en todo el flujo de trabajo. El usuario puede hacer todas las compras y solo se le solicita que inicie sesión al momento de pagar.
- El carrito de la compra no debe caducar (ni siquiera en el navegador cerrado) a menos que el usuario (registrado o no) realice el check-out.
Específicamente, ¿se está guardando un carro de usuario anónimo que no ha iniciado sesión? Eso es una locura Asegúrese de que no sea una expectativa y aclárelo en sus documentos de diseño.
Me gustaría ir con las sesiones administradas de base de datos sobre las sesiones administradas de archivos. Asegúrese de tener una marca de tiempo de la sesión para que eventualmente pueda matar las sesiones anteriores (si han pasado 12 meses, es posible que el comprador no regrese para los artículos originalmente en el carro).
Hacer esto con una base de datos en lugar de archivos hará que sea más fácil caducar la muy antigua información.
Tenga en cuenta que la sesión de la base de datos siempre será válida siempre que la cookie esté vinculada a la computadora del usuario. Si el usuario vuelve a la tienda desde un navegador diferente, no encontrará su sesión. Si dos personas comparten la misma computadora, encontrarán la sesión de la otra. Esperemos que no haya elementos potencialmente embarazosos en el carro ...
Si está usando ASP.NET, aquí está lo que estoy (sobre) hacer:
- utilice un Profile para capturar el correo electrónico de los usuarios lo antes posible (para enviarles un correo electrónico si no completan el pedido). puede habilitar las propiedades de perfil anónimo que se conservan en la base de datos de aspnet, incluso si el usuario realmente no se ha registrado realmente.
- pegar una bolsa XML que representa una orden en sesión. Esto persiste en la base de datos con una identificación de identidad regular.
- almacenar la ID del carro en el Profile ASP.NET. De esta manera, cuando la sesión expire, puede volver a cargarla desde la ID en el perfil. esto tiene la ventaja de que el usuario nunca ve el ID del carrito en una cookie y puede vincular fácilmente los registros entre la base de datos de miembros / perfiles y la tienda que está utilizando para sus pedidos.
(No intente almacenar el orden XML en el Perfil. Creo que eso está pidiendo problemas de rendimiento, pero en teoría podría suponer)