variable sessions sesion net mvc asp asp.net session cookies state-management

asp.net - sessions - Caché VS Session VS cookies?



session mvc net core (7)

La Web es, por naturaleza, un modelo desconectado y ninguna de las opciones mencionadas (Sesión, Aplicación, Caché, ...) es lo suficientemente confiable. La sesión finalizará, el proceso de trabajo se reciclará, etc.

Si realmente necesita almacenar el progreso de los usuarios, de manera confiable y durante períodos prolongados, la base de datos es su única solución. Si tiene un perfil de usuario (si el usuario debe iniciar sesión), entonces es sencillo. De lo contrario, genere un ID único, almacénelo en la cookie (o URL) y rastree al usuario en función de esa identificación.

Solo asegúrese de que la Id esté encriptada y luego codificada en base64 y no solo en un valor numérico.

EDITAR:

Después de su explicación adicional en la pregunta y el comentario original de Mehrdad Afshari, una buena solución para usted sería usar Session pero establecer el almacenamiento en Sql Server en lugar de InProc.

Aquí hay más detalles e instrucciones sobre cómo configurarlo: http://msdn.microsoft.com/en-us/library/ms178586.aspx

Tenga en cuenta que TODAVÍA tendrá los tiempos de espera de la sesión, pero sobrevivirán a los reciclamientos del grupo de aplicaciones, incluso a los reinicios del servidor.

Si realmente necesita un almacenamiento permanente, la solución personalizada con la base de datos, como describí originalmente, es la única solución.

¿Qué hacer y qué no hacer con respecto a las cookies de Cache VS Session VS?

Por ejemplo:
Estoy usando mucho las variables de sesión y algunas veces tengo problemas en una aplicación de reserva cuando los usuarios comienzan a pedir productos y luego van a almorzar y vuelven algunas horas más tarde y continúan con la reserva. Guardo la reserva en la sesión hasta que el usuario confirma o cancela la reserva, por lo que no necesito hablar con la base de datos y gestionar las reservas intermedias en la base de datos cuando los usuarios simplemente hacen clic en la X en el navegador y nunca vuelven.

¿Debería usar caché o cookies o alguna combinación para esto?

(También cuando hay algún error en la aplicación, el objeto de sesión se reinicia y tengo más problemas debido a eso)

Principalmente estoy haciendo programación de escritorio y siento que me falta mucho conocimiento aquí para que cualquiera que pueda ampliar dónde usar Caché, Sesión, Cookies (o db) sea apreciado

Editar: De las respuestas parece que una combinación de DB y cookies es lo que quiero.

  1. Tengo que guardar la reserva en la base de datos conectada a una identificación de sesión
  2. Almacene la identificación de la sesión en una cookie (encriptada).
  3. Cada carga de página verifica la cookie y obtiene la reserva de la base de datos
  4. Tengo un procedimiento de limpieza que se ejecuta una vez a la semana que borra las reservas sin terminar.

No puedo almacenar la reserva como una cookie porque el usuario puede cambiar los precios y otros datos confidenciales y tuve que validar todo (no puedo confiar en los datos).

¿Lo tengo bien?

¡Y gracias por grandes explicaciones para todos ustedes!


La administración del estado es una cosa fundamental para dominar cuando se llega al mundo web desde la perspectiva de una aplicación de escritorio.

  • Session se usa para almacenar información por usuario para la sesión web actual en el servidor . Es compatible con el uso de un servidor de base de datos como la tienda back-end.
  • Cookie debe usarse para almacenar información por usuario para la sesión web actual o información persistente en el cliente , por lo tanto, el cliente tiene control sobre el contenido de una cookie.
  • Cache objeto de Cache se comparte entre usuarios en una sola aplicación . Su objetivo principal es almacenar en caché los datos de un almacén de datos y no debe utilizarse como almacenamiento primario. Es compatible con funciones de invalidación automática .
  • Application objeto de la Application se comparte entre los usuarios para almacenar el estado de toda la aplicación y se debe usar en consecuencia.

Si su aplicación es utilizada por una cantidad de usuarios no autenticados, le sugiero que almacene los datos en una cookie. Si requiere autenticación, puede almacenar los datos en la base de datos manualmente o utilizar las funciones de administración de perfiles de ASP.NET.


La sesión que se almacena en el servidor expirará de manera predeterminada en 20 minutos (Esto es ajustable). Guardaría esto en una cookie, o en viewstate (si está disponible) para evitar el tiempo de espera.

Si su estado está almacenado InProc (la configuración predeterminada), tener más de un servidor en una granja también le causará problemas, a menos que haya implementado algún tipo de "sesión adhesiva" que mantendrá al usuario en el mismo servidor en el granja para llamadas posteriores.

Intento evitar la sesión cuando sea posible (coloca una carga adicional y el uso de memoria en el servidor) y mantenga el ViewState desactivado cuando sea posible para mantener el tamaño de la página bajo. Las cookies son a menudo la opción más ligera, pero sus usuarios pueden tenerlo apagado y necesitará un modo alternativo que aún les permita usar el sitio.

Editar (agregando una aclaración basada en la respuesta de asker):

Viewstate se almacena en un campo oculto y es una representación serializada de todos los objetos en el almacenamiento de Viewstate. Viewstate se usa automáticamente para almacenar el estado de la página, pero puede agregar y recuperar explícitamente sus propios objetos hacia y desde Viewstate programáticamente si así lo desea.

Entonces, sí, los conjuntos de datos se pueden almacenar en Viewstate.


Lo primero que debe saber! ¡las cookies son usadas por la sesión ! El servidor sabe quién es su usuario gracias a la cookie que se intercambia entre el cliente y el servidor cada solicitud (esto funciona con los encabezados HTTP establecidos-cookie y cookie).

La verdadera pregunta es:

  • Si desea almacenar información del usuario durante la navegación, entonces debe usar la sesión.

  • Si su cliente no admite cookies, puede decidir almacenar una cookie dentro de cada solicitud, codificada en la URL (el servidor usará la URL en lugar de la cookie para encontrar la sesión correcta para la solicitud).

Luego, considere dónde quiere almacenar su sesión:
Si su sitio debe tener alta disponibilidad y alto rendimiento, entonces no debe almacenar sesión dentro del proceso sino dentro de una base de datos. De esta forma, podrás compartir el trabajo entre varios servidores web. Pero perderá en simplicidad (porque los objetos que almacena en su sesión deben ser serializables), y tendrá un viaje de ida y vuelta más entre su servidor web y su servidor de base de datos.


No debe usar el Cache-object para almacenar en caché los datos de la sesión, ya que la caché se comparte entre todos los usuarios. En su lugar, podría usar las propiedades del perfil Asp.Net para almacenar sus datos o podría agregar un controlador de eventos al evento Session_End y almacenar los datos si el usuario deja la computadora por demasiado tiempo.


Las cookies se almacenan en el navegador como un formato de archivo de texto. Se almacena una cantidad límite de datos. Solo está permitiendo 4kb [4096bytes] . No contiene la variable múltiple en las cookies.

podemos acceder fácilmente a los valores de cookies. Por lo tanto, es menos seguro . La función setcookie () debe aparecer ANTES de la etiqueta .

Las sesiones se almacenan en el lado del servidor. Se almacena una cantidad ilimitada de datos. Mantiene la variable múltiple en sesiones. no podemos acceder fácilmente a los valores de las cookies. Por lo tanto, es más seguro .

Enlaces: cache-vs-session-vs-cookies


  • Cookie es una información compartida entre las piezas de software que cooperan, almacenando información específica del cliente en la máquina del cliente y luego recuperada para obtener la información del estado.

  • eligió el término " cookie " como " una cookie es un término de informática conocido que se utiliza para describir una pieza opaca de datos en poder de un intermediario ". El término opaco aquí implica que el contenido es de interés y relevancia solo para el servidor y no para el cliente. El navegador incluirá automáticamente la cookie en todas sus solicitudes posteriores al host de origen de la cookie. Una cookie tiene un nombre y un valor, y otro atributo como dominio y ruta, fecha de vencimiento, número de versión y comentarios. para more

Versión de la galleta:

Cookie: cookie-name=cookie-value; Comment=text; Domain=domain-name; Path=path-name; Max-Age=seconds; Version=1; Secure

  • Los datos de la sesión del lado del servidor pueden almacenar datos grandes y los datos de las cookies del lado del cliente tienen un tamaño limitado enviados desde un sitio web al servidor, las cookies generalmente contienen un código de referencia para este tamaño de transferencia de datos de almacenamiento. La sesión se cierra tan pronto como se cierra el navegador, pero las cookies existen más tiempo. El navegador envía una identificación de sesión al servidor como parámetro de URL, cookie o incluso encabezados HTTP.

  • La memoria caché es un componente de hardware o software que almacena datos para que las futuras solicitudes de datos se puedan atender con mayor rapidez; los datos almacenados en un caché pueden ser el resultado de un cálculo anterior o el duplicado de datos almacenados en otro lugar.