Yo diría almacenar el estado en algún lugar del servidor y correlacionarlo con la sesión del usuario. Si bien una cookie podría ser aparentemente un lugar igual para almacenar cosas, si se considera la seguridad y el tamaño de los datos, mantener tantos datos en el servidor como sea posible se convierte en algo bueno.
Por ejemplo, en una configuración de terminal público, ¿estaría bien que alguien mire el contenido de la cookie y vea la lista? Si es así, la cookie está bien; de lo contrario, solo querrá una ID que vincule al usuario con los datos. Hacer eso también le permitiría asegurarse de que el usuario esté autenticado en el sitio para poder acceder a esos datos en lugar de almacenar todo en la máquina; necesitarían alguna forma de credenciales , así como el identificador de la sesión.
Desde una perspectiva de tamaño, seguro que no te preocuparán demasiado las cookies 4K o algo así para un navegador/usuario de banda ancha, pero si uno de tus objetivos es permitir un teléfono móvil o BlackBerry (no 3G) para conectarse y tener una experiencia rápida (y no recibir una factura por los datos), minimizar la cantidad de datos que se pasan al cliente será la clave.
El almacenamiento en el servidor también le da cierta flexibilidad mencionada en algunas de las otras respuestas: el usuario puede guardar su carrito en una máquina y continuar trabajando con ella en otra; puede vincular el carrito a alguna forma de credenciales (en lugar de una sesión transitoria) y persistir en el carrito mucho después de que el usuario haya borrado sus cookies; obtienes un poco más de tolerancia a fallas: si el navegador del usuario falla, el sitio aún tiene los datos sanos y salvos.
Si la tolerancia a fallas es importante, necesitará algún tipo de tienda persistente como una base de datos. De lo contrario, en la memoria de la aplicación probablemente esté bien, pero perderá datos si la aplicación se reinicia. Si se encuentra en un entorno de granja de servidores, la tienda tiene que ser accesible de forma centralizada, por lo que vuelve a consultar una base de datos.
Si selecciona la tecla por sesión transitoria o por credenciales, dependerá de si los usuarios pueden guardar sus datos y volver más adelante para obtenerlos.La sesión transitoria finalmente se limpiará como "abandonada" y tal vez eso esté bien. Al vincularse a un perfil de usuario, el usuario conservará sus datos y lo abandonará explícitamente. De cualquier manera, utilizaría algún tipo de almacén de respaldo, como una base de datos para tolerancia a fallas y accesibilidad central. (¿O tal vez estoy sobreinnovando la solución?)
Puede que ni siquiera haya un db (al menos no uno relacional) ...:) – stevenharman
Guárdelo en su almacén de datos "del lado del servidor" :). ¿Por qué tener 2 tiendas de datos diferentes? El almacenamiento del lado del servidor agrega más flexibilidad y seguridad. –