Compartir a través de


Recomendaciones de administración de estado

La administración de estado es el proceso por el cual se conserva el estado y la información de la página a través de múltiples peticiones de la misma página o de páginas diferentes. Al igual que la tecnología basada en HTTP, los formularios Web Forms no tienen estado, lo que significa que no indican de manera automática si todas las peticiones que se realizan en secuencia provienen del mismo cliente ni si una instancia del explorador todavía está viendo una página o un sitio de manera activa. Además, las páginas se destruyen y se vuelven a crear con cada acción de ida y vuelta al servidor, lo que significa que la información de una página no se conservará fuera del ciclo de vida de la página. Para obtener más información sobre los recorridos de ida y vuelta al servidor y el ciclo de vida de las páginas de formularios Web Forms, vea Procesamiento de páginas de formularios Web Forms.

ASP.NET ofrece distintas maneras de conservar el estado entre acciones de ida y vuelta al servidor. La selección de una de las opciones de administración de estado disponibles en ASP.NET dependerá fundamentalmente de la aplicación y debería basarse en los siguientes criterios:

  • ¿Qué cantidad de información debería almacenar?
  • ¿El cliente aceptará cookies persistentes o en memoria?
  • ¿Desea almacenar la información en el cliente o en el servidor?
  • ¿Se trata de información confidencial?
  • ¿Qué tipo de criterios de rendimiento tiene para la aplicación?

ASP.NET es compatible con varias opciones de administración de estado en el cliente y en el servidor.

Las opciones en el cliente son:

  • Propiedad ViewState
  • Campos ocultos
  • Cookies
  • Cadenas de consulta

Las opciones en el servidor son:

  • Estado de aplicación
  • Estado de sesión
  • Base de datos

Opciones de administración de estado en el cliente

Las opciones en el cliente para almacenar la información de página no utilizan recursos de servidor. Estas opciones ofrecen poca seguridad pero un rendimiento rápido del servidor porque la demanda de recursos de servidor es pequeña. Sin embargo, puesto que se debe enviar información al cliente para su almacenamiento, existe un límite práctico para la información que puede almacenarse de esta forma.

Estado de la vista

Las páginas de formularios Web Forms proporcionan la propiedad ViewState como una estructura integrada para conservar automáticamente valores entre varias peticiones de una misma página. El estado de vista se mantiene en la página en forma de campo oculto. Para obtener más información, vea Introducción a la administración del estado de formularios Web Forms.

Puede utilizar el estado de vista para almacenar los valores específicos de su propia página entre recorridos de ida y vuelta, cuando la página se envía de nuevo a sí misma. Por ejemplo, si la aplicación mantiene información específica del usuario (es decir, información utilizada en la página pero que no forma parte necesariamente de ningún control), se puede almacenar en el estado de vista.

Las ventajas de utilizar el estado de vista son:

  • No se necesitan recursos de servidor. El estado de vista está dentro de una estructura del código de la página.
  • Implementación sencilla.
  • Retención automática del estado de la página y de los controles.
  • Funciones de seguridad ampliadas. Los valores de estado de vista se trocean, comprimen y codifican para implementaciones de Unicode, lo que representa un mayor nivel de seguridad que el de los simples campos ocultos.

Las desventajas de utilizar el estado de vista son:

  • Rendimiento. Puesto que el estado de vista se almacena en la propia página, el almacenamiento de valores de gran tamaño puede hacer que la página se muestre y se envíe de forma más lenta para los usuarios.
  • Seguridad. El estado de vista se almacena en la página en forma de campo oculto. Aunque el estado de vista almacena los datos troceados, se puede manipular. Se puede ver la información de un campo oculto si se obtiene acceso al código fuente de la página directamente, lo que supone un problema de seguridad potencial. Para obtener más información, vea Introducción a la seguridad de aplicaciones Web..

Para obtener más información sobre cómo utilizar el estado de vista, vea Guardar valores de páginas de formularios Web Forms mediante el estado de vista.

Campos ocultos

Puede almacenar información específica de una página en un campo oculto de la página como forma de conservar el estado de la misma. Para obtener más información sobre campos ocultos, vea Introducción a la administración del estado de formularios Web Forms.

Si utiliza campos ocultos, es mejor almacenar sólo cantidades pequeñas de datos que cambian con frecuencia en el cliente. El control HtmlInputHidden de ASP.NET le ofrece la funcionalidad de campo oculto. Para obtener más información acerca de HtmlInputHidden, vea Controles de servidor ASP.NET por función.

**Nota   **Si utiliza campos ocultos, deberá enviar las páginas al servidor mediante el método POST de HTTP, en lugar de solicitar la página mediante su URL (es decir, mediante el método GET de HTTP).

Las ventajas de utilizar campos ocultos son:

  • No se necesitan recursos de servidor. El campo oculto se almacena y se lee en la página.
  • Compatibilidad amplia. La mayoría de los exploradores y dispositivos de cliente admiten formularios con campos ocultos.
  • Implementación sencilla.

Las desventajas de utilizar campos ocultos son:

  • Seguridad. Los campos ocultos se pueden alterar. Se puede ver la información de un campo oculto si se obtiene acceso al código fuente de la página directamente, lo que supone un problema de seguridad potencial. Para obtener más información, vea Introducción a la seguridad de aplicaciones Web..
  • Estructura de almacenamiento limitada. El campo oculto no admite grandes estructuras. Los campos ocultos sólo ofrecen un campo de valor donde colocar la información. Para almacenar múltiples valores, debe implementar cadenas delimitadas y que el código analice estas cadenas.
  • Rendimiento. Puesto que los campos ocultos se almacenan en la propia página, el almacenamiento de valores de gran tamaño puede hacer que la página se muestre y se envíe de forma más lenta para los usuarios.

Cookies

Las cookies son útiles para almacenar pequeñas cantidades de información que cambia con frecuencia en el cliente. La información se envía al servidor con la petición.

Las ventajas de utilizar cookies son:

  • No se necesitan recursos de servidor. La cookie se almacena en el cliente y es leída por el servidor después del envío.
  • Simplicidad. Una cookie es una estructura ligera y basada en texto con simples pares clave-valor.
  • La caducidad se puede configurar. La cookie puede caducar cuando se cierre la sesión del explorador o puede existir indefinidamente en el equipo cliente, sujeta a las reglas de caducidad del mismo.

Las desventajas de utilizar cookies son:

  • Tamaño limitado. La mayoría de los exploradores tienen un límite de 4096 bytes para el tamaño de cookie, aunque cada vez es más frecuente que las nuevas versiones de exploradores y dispositivos de cliente disponibles actualmente admitan un tamaño de cookie de 8192 bytes.

  • El usuario puede configurar el rechazo de cookies. Algunos usuarios desactivan la capacidad de recibir cookies de su explorador o dispositivo cliente, limitando así esta funcionalidad.

  • Seguridad. Las cookies se pueden alterar. Los usuarios pueden manipular las cookies en el equipo, lo que potencialmente puede influir en la seguridad o hacer que la aplicación que depende de la cookie falle. Para obtener más información, vea Introducción a la seguridad de aplicaciones Web.

  • Durabilidad. La durabilidad de una cookie en un equipo cliente está sujeta a los procesos de caducidad de cookies del cliente y a la intervención del usuario.

    Nota   Las cookies se utilizan a menudo para tareas de personalización, donde el contenido se personaliza para cada usuario. En la mayoría de estos casos, el objetivo es más de identificación que de autenticación, por lo que es suficiente almacenar en la cookie el nombre de usuario, el nombre de cuenta o un identificador de usuario único (como un GUID) y utilizarlo para tener acceso a la infraestructura de personalización de usuario de un sitio.

Para obtener detalles acerca de la creación y lectura de cookies, vea HttpResponse.Cookies (Propiedad) y HttpRequest.Cookies (Propiedad).

Cadenas de consulta

Una cadena de consulta es información que se anexa al final de la dirección URL de una página. Para obtener más información, vea Introducción a la administración del estado de formularios Web Forms.

Puede utilizar una cadena de consulta para enviar datos de vuelta a la página o a otra página a través de la dirección URL. Las cadenas de consulta proporcionan una manera sencilla pero limitada de mantener cierta información de estado. Por ejemplo, es una manera sencilla de pasar información de una página a otra, por ejemplo, pasar un código de producto de una página a otra donde se procesará.

**Nota   **Las cadenas de consulta sólo son viables cuando se hace una petición de la página mediante su dirección URL. No puede leer la cadena de consulta de una página cuando ésta ya se ha enviado al servidor.

Las ventajas de utilizar cadenas de consulta son:

  • No se necesitan recursos de servidor. La cadena de consulta está dentro de la petición HTTP de una dirección URL específica.
  • Compatibilidad amplia. Casi todos los exploradores y dispositivos de cliente admiten el paso de valores en una cadena de consulta.
  • Implementación sencilla. ASP.NET es totalmente compatible con el método de cadenas de consulta, incluyendo métodos para leer cadenas de consulta mediante la propiedad HttpRequest.Params.

Las desventajas de utilizar cadenas de consulta son:

  • Seguridad. El usuario puede ver directamente la información de una cadena de consulta en la interfaz de usuario del explorador. Las cadenas de consulta están expuestas en Internet a través de la dirección URL, lo que en algunos casos puede afectar a la seguridad. Para obtener más información, vea Introducción a la seguridad de aplicaciones Web.
  • Capacidad limitada. En la mayoría de los exploradores y dispositivos de cliente la longitud de la dirección URL tiene una limitación de 255 caracteres.

Resumen de los métodos de administración de estado en el cliente

En la tabla siguiente se resumen las opciones de administración de estado del cliente y cuándo se debe considerar su uso.

Método Utilícelo cuando
Estado de vista Necesite almacenar cantidades pequeñas de información de una página que será enviada de vuelta. El uso de la propiedad ViewState proporciona funcionalidad con una seguridad básica.
Campos ocultos Necesite almacenar cantidades pequeñas de información de una página que será enviada de vuelta o de otra página y la seguridad no sea un problema.
Nota   Sólo puede utilizar campos ocultos en páginas que se envíen al servidor.
Cookies Necesite almacenar cantidades pequeñas de información en el cliente y la seguridad no sea un problema.
Cadena de consulta Transfiera cantidades pequeñas de información de una página a otra y la seguridad no sea un problema.
Nota   Sólo puede utilizar cadenas de consulta cuando hace una petición de la misma página o de otra página a través de un vínculo.

Opciones de administración de estado en el servidor

Las opciones para almacenar información de la página en el servidor suelen proporcionar un mayor nivel de seguridad que las opciones en el cliente, pero pueden utilizar mayor número de recursos de servidor Web, lo que puede afectar a la escalabilidad cuando el tamaño de la información almacenada es grande. ASP.NET proporciona distintas opciones para implementar la administración de estado en el servidor. Para obtener más información, vea Introducción a la administración del estado de formularios Web Forms.

Estado de aplicación

ASP.NET proporciona el estado de la aplicación mediante la clase HttpApplicationState, como método para almacenar información global específica de la aplicación de forma que sea visible para toda la aplicación. Las variables de estado de la aplicación son variables globales de una aplicación ASP.NET. Para obtener más información, vea Estado de la aplicación.

Se pueden almacenar los valores específicos de la aplicación en el estado de aplicación, que administra el servidor. Para obtener más información, vea Introducción a la administración del estado de formularios Web Forms.

Los datos que se suelen insertar en las variables de estado de la aplicación son los datos compartidos por múltiples sesiones y que no cambian a menudo.

Nota   Si se almacena un conjunto de datos en el estado de aplicación, se deberá volver a convertir de Object en conjunto de datos. Para obtener detalles, vea Recomendaciones sobre la estrategia de acceso a datos Web.

Las ventajas de utilizar el estado de aplicación son:

  • Implementación sencilla. El estado de aplicación es fácil de usar, conocido por los programadores de ASP y coherente con otras clases de .NET Framework.
  • Ámbito global. Puesto que el estado de aplicación es accesible para todas las páginas de una aplicación, utilizarlo para almacenar información se traduce en guardar una única copia de la información (a diferencia, por ejemplo, de guardar copias de la información en el estado de sesión o en páginas individuales).

Las desventajas de utilizar el estado de aplicación son:

  • Ámbito global. La naturaleza global del estado de aplicación puede también representar un inconveniente. Las variables que se almacenan en el estado de la aplicación son globales sólo para el proceso en el que se está ejecutando la aplicación y cada proceso de aplicación puede tener valores diferentes. Por lo tanto, no puede basarse en el estado de la aplicación para almacenar valores únicos o para actualizar contadores globales en configuraciones Web-garden y de baterías de servidores Web.
  • Durabilidad. Como los datos globales almacenados en el estado de la aplicación son volátiles, se perderán si se destruye el proceso de servidor Web que los contiene, en la mayoría de los casos porque el servidor se quede bloqueado, se actualice o se apague.
  • Requisitos de recursos. El estado de aplicación necesita memoria del servidor, lo que puede afectar al rendimiento del mismo, así como a la escalabilidad de la aplicación.

Mediante un cuidadoso diseño y una buena implementación del estado de la aplicación puede mejorar el rendimiento de la aplicación Web. Por ejemplo, si se utiliza el estado de aplicación para guardar conjuntos de datos de uso común y relativamente estáticos, se puede aumentar el rendimiento del sitio mediante la reducción del número global de solicitudes a la base de datos. Sin embargo, existe una contrapartida relativa al rendimiento. Las variables de estado de aplicación que contienen grandes bloques de información reducen el rendimiento del servidor Web a medida que aumenta la carga del mismo. La memoria que ocupa una variable almacenada en el estado de la aplicación no se libera hasta que el valor es eliminado o reemplazado. Por tanto, es mejor utilizar variables de estado de aplicación sólo con conjuntos de datos pequeños y cuya modificación sea poco frecuente. Para obtener más información sobre la optimización de aplicaciones Web ASP.NET, vea Optimización de ASP.NET.

Estado de sesión

ASP.NET proporciona el estado de sesión, disponible mediante la clase HttpSessionState, como método para almacenar información específica de la sesión de forma que sea visible sólo dentro de ésta. Para obtener más información, vea Introducción a la administración del estado de formularios Web Forms y Estado de sesión.

Se pueden almacenar los valores y objetos específicos de la sesión en el estado de sesión, que el servidor administra, y que está disponible para el explorador o el dispositivo cliente. Lo ideal es almacenar en las variables de estado de la sesión datos de duración corta, datos confidenciales para una sesión individual específica.

Nota   Si se almacena un conjunto de datos en el estado de aplicación, se deberá volver a convertir de Object en conjunto de datos. Vea Recomendaciones sobre la estrategia de acceso a datos Web.

Las ventajas de utilizar el estado de sesión son:

  • Implementación sencilla. El estado de sesión es fácil de usar, conocido por los programadores de ASP y coherente con otras clases de .NET Framework.
  • Eventos específicos de sesión. Su aplicación puede producir y utilizar los eventos de administración de sesión.
  • Durabilidad. Los datos guardados en variables de estado de sesión pueden sobrevivir al reinicio de los Servicios de Internet Information Server (IIS) y al reinicio de los procesos de trabajo sin perder datos de sesión, ya que éstos se almacenan en otro espacio de proceso.
  • Escalabilidad de plataforma. El estado de sesión se puede utilizar en configuraciones multisistema y multiproceso, optimizando así las diversas situaciones de escalabilidad.
  • El estado de sesión funciona con los exploradores que no admiten las cookies HTTP, aunque se suele utilizar en combinación con éstas para proporcionar servicios de identificación de usuario a las aplicaciones Web. Para obtener más información sobre el uso del estado de sesión sin cookies, vea Secciones de configuración de ASP.NET.

Para obtener más información, vea Estado de la sesión.

La desventaja de utilizar el estado de sesión es:

  • Rendimiento. Las variables de estado de la sesión permanecen en memoria hasta que se eliminan o reemplazan y pueden empeorar el rendimiento del servidor. Las variables de estado de la sesión que contienen grandes bloques de información como conjuntos de datos, pueden afectar negativamente al rendimiento del servidor Web a medida que aumenta la carga.

Compatibilidad con bases de datos

En algunos casos, puede preferir el uso de la compatibilidad con bases de datos para conservar el estado en el sitio Web. Generalmente, la compatibilidad con bases de datos se utiliza en combinación con las cookies o el estado de sesión. Por ejemplo, es muy frecuente que un sitio Web de comercio electrónico conserve la información de estado mediante una base de datos relacional por las siguientes razones:

  • Seguridad
  • Personalización
  • Coherencia
  • Extracción de datos

Las características típicas de un sitio Web con base de datos combinado con cookies:

  • Seguridad. El usuario escribe un nombre de cuenta y una contraseña en una página de inicio de sesión del sitio. La infraestructura del sitio hace una consulta en la base de datos con los valores de inicio de sesión para determinar si el usuario dispone de los permisos necesarios para utilizar el sitio. Si la base de datos valida la información del usuario, el sitio Web distribuirá una cookie válida que contenga un identificador único para ese usuario en el equipo cliente. El sitio concede el acceso al usuario.
  • Personalización. Una vez tratada la información de seguridad, el sitio es capaz de distinguir a cada usuario leyendo la cookie en el equipo cliente. Normalmente, los sitios tienen información en la base de datos que describe las preferencias de cada usuario (identificado por un identificador único). Esta relación se conoce como personalización. El sitio puede investigar las preferencias del usuario utilizando el identificador único que contiene la cookie y, a continuación, colocar el contenido y la información a disposición del usuario según sus deseos específicos e ir reaccionando a las preferencias del usuario.
  • Coherencia. Si ha creado un sitio Web de comercio electrónico, es posible que desee mantener los registros transaccionales de las compras de productos y servicios realizadas en el sitio. Puede guardar esta información en la base de datos de un modo confiable y hacer referencia a ella con el id. exclusivo del usuario. Puede utilizarla para determinar si una transacción de compra se ha completado y, en el caso de que ésta haya fallado, para determinar el curso de las acciones a seguir. También se puede utilizar para informar al usuario sobre el estado de un pedido situado en el sitio.
  • Extracción de datos. La información sobre el uso del sitio, los visitantes o las transacciones de un producto se pueden almacenar de forma segura en la base de datos. Por ejemplo, el departamento de desarrollo de la empresa puede utilizar los datos recogidos del sitio para determinar la línea de productos o la política de distribución para el próximo año. El departamento de marketing puede examinar información demográfica sobre los usuarios del sitio. Los departamentos de ingeniería y soporte pueden analizar las transacciones y observar las áreas donde se podría mejorar el proceso de compra. La mayoría de las bases de datos relacionales a nivel empresarial, como, por ejemplo, Microsoft SQL Server, contienen un amplio conjunto de herramientas para la mayor parte de proyectos de extracción de datos.

Si se diseña el sitio Web para que consulte repetidamente a la base de datos mediante el identificador exclusivo durante cada una de las fases generales de la situación descrita, el sitio mantiene el estado. De esta manera, el usuario percibe que el sitio le recuerda y que reacciona de manera personalizada.

Las ventajas de utilizar una base de datos para conservar el estado son:

  • Seguridad. El acceso a bases de datos suele ser muy seguro, ya que exige una rigurosa autenticación y autorización.
  • Capacidad. Se puede almacenar en la base de datos tanta información como se desee.
  • Persistencia. La información de la base de datos se puede almacenar durante el tiempo deseado, y no está sujeta a la disponibilidad del servidor Web.
  • Solidez e integridad de datos. Las bases de datos suelen incluir diversas funciones para el mantenimiento de la corrección de los datos, entre ellas desencadenadores e integridad referencial, transacciones, etc. Si se guarda la información de transacciones en una base de datos (en lugar de en el estado de sesión), es más rápido recuperarse de los errores.
  • Accesibilidad. Los datos almacenados en la base de datos son accesibles para una amplia variedad de herramientas de proceso de información.
  • Amplia compatibilidad. Existe un gran número de herramientas de bases de datos disponibles así como configuraciones personalizadas.

Las desventajas de utilizar una base de datos para conservar el estado son:

  • Complejidad. La utilización de una base de datos para la administración del estado implica configuraciones hardware y software más complejas.
  • Rendimiento. Una mala construcción del modelo de datos relacionales puede derivar en problemas de ajuste. También, el uso de demasiadas consultas a la base de datos puede afectar negativamente al rendimiento del servidor.

Resumen de los métodos de administración de estado en el servidor

En la tabla siguiente se resumen las opciones de administración de estado del servidor, y cuándo se debe considerar su uso.

Método Utilícelo cuando
Estado de aplicación Se almacena información global que raramente cambia, y que utilizan muchos usuarios, y la seguridad no es una cuestión importante. No utilice el estado de aplicación para almacenar grandes cantidades de información.
Estado de sesión Almacene información de corta duración que es específica de una sesión individual y la seguridad no sea un problema. No utilice el estado de sesión para almacenar grandes cantidades de información. Tenga en cuenta que un objeto de estado de sesión se creará y conservará durante el ciclo de vida de cada sesión de la aplicación. En aplicaciones que hospeden a muchos usuarios, esto puede ocupar un número significativo de recursos de servidor y afectar a la escalabilidad.
Compatibilidad con bases de datos Almacene gran cantidad de información, administre transacciones o la información deba conservarse aunque se vuelva a iniciar la aplicación o la sesión. Suele utilizarse para la extracción de datos, y la seguridad es una cuestión importante a tener en cuenta.

Vea también

Administración del estado de los formularios Web Forms | Introducción a la administración del estado de formularios Web Forms | Programar formularios Web Forms | Recomendaciones de administración de estado | Guardar valores de páginas de formularios Web Forms mediante el estado de vista | Desarrollar aplicaciones ASP.NET de alto rendimiento