que paginas pages page net mvc microsoft aspnet asp.net-mvc asp.net-mvc-3 session

paginas - Todavía está bien utilizar variables de sesión en ASP.NET mvc, o hay una mejor alternativa para algunas cosas(como un carro)



razor pages net core (7)

En el sistema de carrito de compras, los productos que se agregan al carrito son muy importantes, por lo que utilizar la sesión no es una buena idea desde mi punto de vista. El uso de cookies y una tabla temporal en la base de datos es una de las mejores ideas. Podemos almacenar esos datos para siempre o puede borrar después de ciertos días.

Tengo una situación en la que necesito acceder a un carrito de compras en varias páginas. Por lo tanto, en la página del producto, cree el carrito y agregue algunos artículos. En la página de pago del carrito, confirme la dirección de facturación. En la publicación del proceso de compra del carrito, realice una verificación final, agregue el carrito a DB e inicie el pago.

Mi pregunta es, ¿cuál es la mejor manera de pasar por el carrito?

He intentado pasar el carrito de la página a la devolución y mantener todos los valores, sin embargo, en algunas páginas (la página de confirmación de la dirección de facturación) parece una gran molestia, todo lo que quiero verificar es la dirección de facturación y realmente no quiero toneladas de HiddenFor () en la página para rellenar el carrito nuevamente

TempData [] es lo que utilicé para la página de salida del producto, luego me pregunté si es mejor seguir configurando TempData todo el tiempo cuando ....

podrías usar una variable de sesión?

Por alguna razón, leí que no es una buena práctica usar Session, de ahí la pregunta.

Gracias por su orientación, puedo proporcionar algún tipo de código / más información si lo considera útil.


Está muy bien usar sesión con la aplicación asp.net mvc. Steve Sanderson ha usado la sesión para el carro en la aplicación de muestra que viene con su libro. El código está disponible aquí


Está perfectamente bien utilizar sesiones en ASP.NET MVC, especialmente en el escenario del carrito de compras.

Hay inconvenientes en el uso de sesiones, pero parece que no se aplican a su caso:

1) Las sesiones impiden que un usuario explore correctamente su sitio desde varias pestañas del navegador, los cambios realizados en una pestaña se reflejan en todos los demás. Pero con un carrito de compras, es exactamente lo que necesita. No necesita varios carros de compras por usuario, ¿verdad?

2) Las sesiones no se conservan de forma predeterminada, y si está trabajando en una granja web, debe guardar las sesiones en su base de datos para que todos los nodos de la comunidad puedan acceder a ellas. Pero parece poco probable que estés escalando así. Y si cumple con la necesidad de escalar, las sesiones no serán sus principales problemas.

3) Las sesiones requieren funcionalidad adicional del navegador del usuario (generalmente, cookies). Pero todos los navegadores modernos admiten cookies, por lo que solo debe preocuparse por navegadores muy especiales.

También hay algunos beneficios de las sesiones sobre las entradas ocultas:

1) La menor sobrecarga. Solo una pequeña cookie de sesión pasa entre usted y el cliente, en lugar del conjunto completo de entradas ocultas.

2) Programación más simple. No tiene que asegurarse de haber incluido sus entradas ocultas en cada una de sus páginas.

3) Seguridad. El cliente puede alterar el contenido de las entradas ocultas como le plazca. No puede pasar fácilmente información confidencial a través de entradas ocultas, necesita encriptarla. Los valores de sesión se almacenan en el servidor, por lo que el cliente no tiene acceso a ellos.


Para un carrito de compras, definitivamente no deberías usar el estado de la sesión . Un enfoque sensato es usar el Módulo de Identificación Anónima para administrar una cookie por usted. Todo lo que necesita es una línea en web.config .

<system.web> <anonymousIdentification enabled="true" /> </system.web>

Luego, en cada solicitud puede usar la propiedad Request.AnonymousID (que devuelve una cadena que representa un GUID) para buscar el carrito de compras en la base de datos.

public ActionResult ShowCartDetails() { var CartId = new Guid(Request.AnonymousID); // Lookup cart... return View(); }

Esto no solo es más eficiente que usar el estado de la sesión, sino que también es más simple.

Referencias


Tiendo a usar una cookie con mi carrito de compras serializado en una base64 string esto parece funcionar bastante bien


Usaría Session, a menos que haya razones para evitarlo.

Por ejemplo, tengo un proyecto en el que tengo llamadas repetidas a una acción de MVC en segundo plano. Esta acción sirve un archivo, que es lento en la red. Solía ​​usar Session, pero descubrí rápidamente el principal efecto adverso: IIS no ejecutará llamadas del mismo usuario en paralelo, sino solo secuencialmente una después de la otra. Esto tuvo un impacto dramático en el rendimiento, por lo que utilicé un método alternativo: configuré HttpContext.User.Identity en el nombre de usuario y lo uso como clave para recuperar elementos de la base de datos. Pero probablemente podría establecerlo en algún GUID aleatorio y tener esto para reemplazar Sesiones.


Las sesiones están bien, pero considere el sistema de estilo Amazon por el cual se le entrega una cookie de reconocimiento incluso cuando no está conectado. Esto le permite almacenar su cesta de la compra en la base de datos, marcada con la cookie de reconocimiento.

El resultado es que evita la horrible experiencia de usuario de perder su cesta de la compra debido al tiempo de espera de la sesión / el dominio del dominio del servidor (este último se mitiga mediante el almacenamiento de la sesión SQLState, que recomiendo). El usuario puede volver días más tarde y su cesta aún estará allí. A menos que sea un problema de seguridad / privacidad, creo que es la mejor solución.