net mvc httpsessionstate example current asp asp.net session

asp.net - httpsessionstate - session in asp net core mvc



Almacenar carrito de compras en sesiĆ³n (2)

Sé que el consenso general sobre la información, como los artículos del carrito de compras, es almacenarlos en sesión. Pero, ¿qué pasa con los objetos que pertenecen a un usuario que pueden ser alterados por otros usuarios? Digamos, por ejemplo, un sitio parecido al de eBay. Si almacena los "elementos" de sesión de un usuario, que contienen el importe de la oferta actual, y otro usuario entra y hace una oferta por ese artículo, deberá actualizar tanto el artículo en la base de datos como el elemento en sesión. ¿No es así?

En casos como estos, son las únicas opciones para almacenar en sesión y actualizar cuando cualquier acción que otro usuario tome afecta los valores de sesión de una persona o almacena todo en la base de datos y la recupera cada vez (podría ser costosa si, por ejemplo, tiene las ofertas mostradas) en el panel lateral de cada página).


Lo almacenaba todo en la base de datos y lo recuperaba cada vez. Dependiendo de la volatilidad del almacenamiento en caché de datos durante unos segundos puede estar en orden. El mayor problema es mantener los dos consistentes.

Creo que no es tan caro como crees para recuperar los datos cada vez. Las bases de datos son muy eficientes si buscas sobre la base de una clave. Erraría por el lado de la simplicidad (almacenar en DB y recuperar) hasta que aparezcan problemas de rendimiento bajo carga (es decir, en la prueba de carga).

Si solo va a haber un puñado de veces, es posible que pueda usar el caché de la aplicación (a menos que tenga más de un proceso / servidor de trabajo) y asegúrese de que el DB y el caché permanezcan sincronizados.


Yo personalmente lo almacenaría en una base de datos. En primer lugar, porque sus datos son mucho más seguros y facilita compartirlos en el caso de que necesite una granja de servidores web. Además, no necesita tener los datos en cada página. Justo cuando el usuario va al carrito de compras. La otra ventaja de almacenarlo en la base de datos es que usted puede analizar más adelante, las cosas que las personas están agregando al carrito, pero que en realidad no están comprando.