Información general sobre la administración de estados de ASP.NET

Actualización: noviembre 2007

Cada vez que la página se envía al servidor, se crea una nueva instancia de la clase de la página Web. En la programación Web tradicional, esto se traduce en que toda la información asociada a la página y sus controles se pierden con cada recorrido de ida y vuelta. Por ejemplo, si un usuario escribe información en un cuadro de texto, dicha información se perderá en el recorrido de ida y vuelta desde el explorador o dispositivo cliente al servidor.

Para superar esta limitación inherente de la programación Web tradicional, ASP.NET incluye varias opciones que ayudan a preservar los datos en cada página y en toda la aplicación. Estas características son las siguientes:

  • Estado de vista

  • Estado de control

  • Campos ocultos

  • Cookies

  • Cadenas de consulta

  • Estado de aplicación

  • Estado de sesión

  • Propiedades de perfiles

Las características de estado de vista, estado de control, campos ocultos, cookies y cadenas de consulta almacenan todas ellas datos en el cliente de formas distintas, mientras que las características de estado de aplicación, estado de sesión y propiedades de perfil almacenan los datos en la memoria del servidor. Cada opción tiene ventajas y desventajas, dependiendo del escenario.

Opciones de administración de estado basada en cliente

Las siguientes secciones describen opciones para administrar el estado que almacenan la información en la página o en el equipo cliente. En estas opciones, la información no se conserva en el servidor entre acciones de ida y vuelta.

Estado de vista

La propiedad ViewState proporciona un objeto de diccionario para conservar valores entre las distintas solicitudes de una misma página. Éste es el método predeterminado que la página utiliza para conservar los valores de las propiedades de la propia página y sus controles entre recorridos de ida y vuelta.

Cuando se procesa la página, se calcula el valor de hash del estado actual de la página y de los controles en una cadena y se guarda en la página como campo oculto o varios campos ocultos si el volumen de los datos almacenados en la propiedad ViewState sobrepasa el valor especificado en la propiedad MaxPageStateFieldLength. Cuando se vuelve a enviar la página al servidor, ésta analiza la cadena de estado de vista durante su inicialización y la información de las propiedades se restablece en ella.

En un estado de vista se puede también almacenar valores. Para obtener más información sobre el uso del estado de vista, vea Información general sobre el estado de vista en ASP.NET. Para conocer las recomendaciones sobre cuándo se debe utilizar el estado de vista, vea Recomendaciones de administración de estado de ASP.NET.

Estado de control

En ocasiones es necesario almacenar los datos del estado de control para que un control funcione correctamente. Por ejemplo, si ha escrito un control personalizado con varias fichas que muestran distintos tipos de información, el control debe saber la ficha que se selecciona en los recorridos de ida y vuelta para que funcione tal y como se espera. La propiedad ViewState se puede utilizar para este propósito, pero los desarrolladores pueden desactivar el estado de vista en el nivel de página, interrumpiendo su control eficazmente. Para resolver este problema, el marco de trabajo de la página ASP.NET cuenta con una característica de ASP.NET denominada "estado de control".

La propiedad ControlState permite mantener la información de las propiedades que es específica de un control y que no se puede desactivar como ocurre con la propiedad ViewState.

Campos ocultos

ASP.NET permite almacenar información en un control HiddenField, que se representa como campo oculto estándar HTML. Un campo oculto no está visible en el explorador, pero se pueden configurar sus propiedades igual que las de un control estándar. Cuando se envía una página al servidor, el contenido del campo oculto se envía en la colección Form de HTTP junto con los valores de otros controles. Un campo oculto actúa como repositorio de cualquier información específica de página que desee almacenar directamente en la página.

Nota de seguridad:

Es fácil que un usuario malintencionado vea y modifique el contenido de un campo oculto. No almacene ninguna información que sea confidencial o en la que se base la aplicación para funcionar correctamente en un campo oculto. Para obtener más información, vea Recomendaciones de administración de estado de ASP.NET.

Un control HiddenField almacena una única variable en su propiedad Value y se debe agregar en la página de forma explícita. Para obtener más información, vea Información general sobre HiddenField (Control de servidor Web).

Para que los valores de los campos ocultos estén disponibles durante el procesamiento de la página, debe enviarla mediante el método POST de HTTP. Si utiliza campos ocultos y una página se procesa como respuesta a un vínculo o a un comando GET de HTTP, los campos ocultos no estarán disponibles. Para conocer las recomendaciones de uso, vea Recomendaciones de administración de estado de ASP.NET.

Cookies

Una cookie es una cantidad pequeña de datos que se almacena en un archivo de texto en el sistema de archivos del cliente o que se mantiene en la memoria durante la sesión del explorador cliente. Contiene información específica del sitio que el servidor envía al cliente junto con el resultado de la página. Las cookies pueden ser temporales (con fechas y horas de caducidad específicas) o permanentes.

Las cookies se pueden utilizar para almacenar información acerca de un cliente, sesión o aplicación específicos. Las cookies se guardan en el dispositivo cliente y, cuando el explorador solicita una página, el cliente envía la información de la cookie junto con la información de la solicitud. El servidor puede leer la cookie y extraer su valor. Uno de los usos típicos es almacenar un símbolo (puede que cifrado) que indica que el usuario ya se ha autenticado en la aplicación.

Nota de seguridad:

El explorador sólo puede devolver los datos al servidor que creó la cookie. Sin embargo, algunos usuarios malintencionados cuentan con medios para tener acceso a las cookies y leer su contenido. Se recomienda no almacenar información confidencial, como el nombre de usuario o la contraseña, en una cookie. En su lugar, almacene un símbolo (token) en la cookie que identifique al usuario y, a continuación, utilice el símbolo para buscar la información confidencial en el servidor.

Para obtener más información sobre el uso de las cookies, vea Cookies y Recomendaciones de administración de estado de ASP.NET.

Cadenas de consulta

Una cadena de consulta es información que se anexa al final de la dirección URL de una página. Un ejemplo típico de cadena de consulta podría tener el siguiente aspecto:

https://www.contoso.com/listwidgets.aspx?category=basic&price=100

En la ruta URL indicada, la cadena de consulta empieza por un signo de interrogación (?) e incluye dos pares de atributo-valor, uno de ellos se denomina "category" y el otro, "price".

Las cadenas de consulta proporcionan una manera sencilla pero limitada de mantener la 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á. Sin embargo, en algunos exploradores y dispositivos de cliente la longitud de la dirección URL tiene una limitación de 2083 caracteres.

Nota de seguridad:

La información que se pasa en una cadena de consulta puede ser manipulada por un usuario malintencionado. No utilice cadenas de consulta para transmitir información importante o confidencial. Además, un usuario puede marcar la dirección URL o puede enviarla a otros usuarios, pasando esa información con la dirección URL. Para obtener más información, vea Recomendaciones de administración de estado de ASP.NET y Cómo: Proteger una aplicación Web frente a ataques mediante secuencias de comandos aplicando codificación HTML a las cadenas.

Para que los valores de las cadenas de consulta estén disponibles durante el procesamiento de la página, debe enviar la página utilizando el método GET de HTTP. Es decir, no puede utilizar las cadenas de consulta si la página se procesa como respuesta a un método POST de HTTP. Para conocer las recomendaciones de uso, vea Recomendaciones de administración de estado de ASP.NET.

Opciones de administración de estado basada en servidor

ASP.NET proporciona una serie de medios para mantener la información de estado en el servidor, en lugar de conservarla en el cliente. Con la administración de estados basada en servidor, puede reducir la cantidad de información que se envía al cliente para conservar el estado, sin embargo, puede suponer un uso excesivo de los recursos del servidor. En las secciones siguientes se describen tres características de la administración de estados basada en servidor: estado de aplicación, estado de sesión y propiedades de perfiles.

Estado de aplicación

ASP.NET permite guardar valores utilizando el estado de sesión, que es una instancia de la clase HttpApplicationState, de cada aplicación Web activa. El estado de aplicación es un mecanismo de almacenamiento global al que se puede obtener acceso desde todas las páginas de la aplicación Web. Por tanto, el estado de aplicación resulta útil para almacenar la información que se debe mantener en los recorridos de ida y vuelta del servidor y entre las solicitudes de las páginas. Para obtener más información, vea Información general sobre el estado de aplicación de ASP.NET.

El estado de aplicación se almacena en un diccionario de tipo clave-valor que se crea cada vez que se envía una solicitud a una dirección URL específica. Puede agregar información específica de la aplicación a esta estructura para almacenarla entre las peticiones de página.

Después de agregar la información específica de la aplicación a estado de aplicación, el servidor se encarga de administrarla. Para conocer las recomendaciones de uso, vea Recomendaciones de administración de estado de ASP.NET.

Estado de sesión

ASP.NET permite guardar valores utilizando el estado de sesión, que es una instancia de la clase HttpSessionState, de cada sesión de una aplicación Web activa. Para obtener información general, vea Información general sobre el estado de sesión de ASP.NET.

Estado de sesión es similar a estado de aplicación, con la diferencia de que el ámbito es la actual sesión del explorador. Si hay varios usuarios utilizando la aplicación, cada uno de ellos tendrá un estado de sesión distinto. Asimismo, si un usuario sale de la aplicación y vuelve más tarde, el segundo usuario tendrá un estado de sesión distinto al del primero.

El estado de sesión tiene la estructura de un diccionario de tipo clave-valor para almacenar información específica de cada sesión que se debe conservar en recorridos de ida y vuelta del servidor, así como entre solicitudes de páginas. Para obtener más información, vea Información general sobre el estado de sesión de ASP.NET.

Puede utilizar el estado de sesión para llevar a cabo las tareas siguientes:

  • Identificar unívocamente las peticiones del explorador o del dispositivo de cliente y asignarlas a una instancia de sesión individual en el servidor.

  • Almacenar en el servidor datos específicos de la sesión para utilizarlos a través de múltiples peticiones del explorador o dispositivo dentro de la misma sesión.

  • Producir eventos de administración de sesión adecuados. Adicionalmente, puede escribir código de aplicación para aprovechar estos eventos.

Después de agregar la información específica de la aplicación a estado de sesión, el servidor se encarga de administrar dicho objeto. En función de las opciones especificadas, la información de la sesión se puede almacenar en cookies, en un servidor que no forme parte del proceso, o en un equipo que ejecute Microsoft SQL Server. Para conocer las recomendaciones de uso, vea Recomendaciones de administración de estado de ASP.NET.

Propiedades de perfiles

ASP.NET proporciona una característica denominada "propiedades de perfiles" que permite almacenar datos específicos del usuario. Esta característica es similar al estado de sesión, salvo que los datos del perfil no se pierden cuando caduca la sesión de un usuario. La característica propiedades de perfiles utiliza un perfil ASP.NET, que se guarda en un formato persistente y que se asocia con un usuario específico. El perfil ASP.NET permite administrar con facilidad la información sobre el usuario sin que sea necesario crear y mantener una base de datos propia. Además, el perfil hace que la información del usuario esté disponible mediante una API con establecimiento inflexible de tipos a la que puede obtener acceso desde cualquier punto de la aplicación. Puede almacenar objetos de cualquier tipo en el perfil. La característica de perfil de ASP.NET proporciona un sistema de almacenamiento genérico que permite definir y mantener casi cualquier tipo de datos mientras éstos sigan estando disponibles en un modo de seguridad de tipos.

Para utilizar las propiedades de perfiles, debe configurar un proveedor de perfiles. ASP.NET incluye una clase SqlProfileProvider que permite almacenar los datos del perfil en una base de datos de SQL, aunque también puede crear una clase propia de proveedor de perfiles que almacene los datos del perfil en un formato personalizado y disponga de un mecanismo de almacenamiento personalizado, como un archivo XML o incluso un servicio Web.

Puesto que los datos colocados en las propiedades de perfiles no se almacenan en la memoria de la aplicación, se conservan cuando se reinician Internet Information Services (IIS) y el proceso de trabajo sin pérdida de datos. Además, las propiedades de perfiles se pueden preservar en varios procesos, como en una batería de servidores Web o un hospedaje multiproceso en un único equipo. Para obtener más información, vea Información general sobre las propiedades de perfil de ASP.NET.

Vea también

Conceptos

Recomendaciones de administración de estado de ASP.NET

Información general sobre las cookies en ASP.NET

Información general sobre el estado de vista en ASP.NET

Información general sobre el estado de sesión de ASP.NET

Información general sobre el estado de aplicación de ASP.NET

Información general sobre las propiedades de perfil de ASP.NET