Introducción a la administración del estado de formularios Web Forms
Las páginas Web se vuelven a crear cada vez que la página se envía al servidor. En la programación Web tradicional, esto se traduce en que toda la información asociada a la página y los controles de la misma 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 obtener más información, vea Procesamiento de páginas de formularios Web Forms.
Para superar esta limitación inherente a la programación Web tradicional, el marco de trabajo de las páginas ASP.NET incluye diversas opciones que ayudan a conservar los cambios; es decir, opciones de administración de estado. El marco de trabajo de la página incluye un servicio denominado estado de vista, que conserva automáticamente los valores de las propiedades de la página y de todos sus controles de un recorrido de ida y vuelta a otro. Sin embargo, es posible que también haya valores específicos de la aplicación que se desee conservar. Para ello, se puede utilizar una de las opciones de administración de estado.
Alguna de estas opciones mantienen la información en el cliente, por ejemplo, directamente en la página o en una cookie, y otras almacenan la información en el servidor entre acciones de ida y vuelta. Cada opción tiene sus ventajas y desventajas.
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 la vista
La propiedad Control.ViewState proporciona un objeto de diccionario para conservar valores entre las distintas peticiones de una misma página. Este es el método 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, el estado actual de la página y de los controles se guarda troceado en una cadena, que se guarda en la página en forma de campo oculto. Cuando se vuelve a enviar la página al servidor, la página analiza la cadena de estado de vista y restablece en ella la información de propiedades.
En un estado de vista se puede también almacenar valores. Para obtener detalles, vea Guardar valores de páginas de formularios Web Forms mediante el estado de vista. Para obtener recomendaciones de uso del estado de vista, vea Recomendaciones de administración de estado.
Campos de formulario ocultos
ASP.NET permite utilizar en un formulario campos ocultos HTML estándar. 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 un repositorio de cualquier información específica que desee almacenar directamente en la página.
Nota de seguridad Es fácil que un usuario malicioso 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.
Un campo oculto almacena una única variable en su propiedad value, y se debe agregar a la página de forma explícita. Después se inserta el valor en el campo oculto. ASP.NET ofrece el control HtmlInputHidden, que ofrece funciones para el manejo de campos ocultos. Para obtener más información, vea Controles de servidor ASP.NET por función.
Para que los valores de los campos ocultos estén disponibles durante el procesamiento de la página, debe enviar la página utilizando el método POST de HTTP. Es decir, no puede beneficiarse de los campos ocultos si la página se procesa como respuesta a un vínculo o a un método GET de HTTP. Para obtener recomendaciones de uso, vea Recomendaciones de administración de estado.
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 memoria en la sesión del explorador cliente. Contiene información específica de la página que envía el servidor 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, envía la información de la cookie junto con la información de 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 puede devolver los datos sólo al servidor que creó la cookie. Sin embargo, algunos usuarios con malas intenciones cuentan con medios para "robar" 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) que pueda utilizar para buscar la información reservada en el servidor.
Para obtener más información sobre el uso de cookies, vea HttpResponse.Cookies (Propiedad) y Recomendaciones de administración de estado.
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 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 con un signo de interrogación (?) e incluye dos parejas de atributo-valor, una de ellas denominada "category", y la otra denominada "price".
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á. Sin embargo, 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.
Nota de seguridad La información pasada en una cadena de consulta puede ser manipulada por un usuario con malas intenciones. No utilice cadenas de consulta para transmitir información importante o confidencial. Para obtener más información, vea Ataques mediante secuencias de comandos.
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 beneficiarse de las cadenas de consulta si la página se procesa como respuesta a un método post de HTTP. Para obtener recomendaciones de uso, vea Recomendaciones de administración de estado.
Opciones de administración de estado basada en servidor
ASP.NET le ofrece distintas maneras de conservar la información de estado en el servidor, como se describe en las secciones siguientes.
Estado de aplicación
ASP.NET permite guardar valores utilizando el estado de la aplicación (una instancia de la clase HttpApplicationState) para cada aplicación Web activa. Estado de aplicación es un mecanismo de almacenamiento general accesible desde todas las páginas de la aplicación Web, por lo que es útil para el almacenamiento de información que deba conservarse entre recorridos de ida y vuelta del servidor y de una página a otra. Para obtener más información, vea Estado de la aplicación.
Estado de aplicación es una estructura de diccionario de tipo clave-valor que se crea durante cada solución a una 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 obtener recomendaciones de uso, vea Recomendaciones de administración de estado.
Estado de sesión
ASP.NET permite guardar valores utilizando el estado de sesión, que es una instancia de la clase HttpSessionState para cada sesión de aplicación Web activa. (Para obtener una introducción, vea Estado de la sesión).
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 distintos usuarios utilizando la aplicación, cada uno de ellos tendrá un estado de sesión distinto. Asimismo, si el mismo usuario deja la aplicación y vuelve más tarde, el usuario tendrá también un estado de sesión distinto.
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 debe conservarse entre recorridos de ida y vuelta del servidor y entre solicitudes de páginas. Para obtener más información, vea Estado de la sesión.
Estado de sesión permite:
- 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 sesión se puede almacenar en cookies, en un servidor que no forme parte del proceso, o en un SQL Server. Para obtener recomendaciones de uso, vea Recomendaciones de administración de estado.
Compatibilidad con bases de datos
Es una práctica común conservar el estado utilizando tecnología de bases de datos para almacenar una gran cantidad de información específica del usuario. El almacenamiento en bases de datos es especialmente útil para conservar el estado a largo plazo, o para conservarlo aún en el caso de que se deba reiniciar el servidor.
El enfoque mediante bases de datos se suele utilizar en combinación con las cookies. Por ejemplo, cuando un usuario tiene acceso por primera vez a la aplicación, puede hacer que el usuario inicie una sesión. Después, puede buscar al usuario en su base de datos y pasarle una cookie. La cookie puede contener únicamente el identificador del usuario en la base de datos (por ejemplo, un número de cliente). A continuación se puede utilizar la cookie en las solicitudes subsiguientes para buscar la información del usuario en la base de datos, según sea necesario.
Nota de seguridad Puesto que las cookies pueden ser manipuladas por personas con malas intenciones, debe tener cuidado al utilizarlas para almacenar información en la que se basa la aplicación. Por ejemplo, nunca guarde información confidencial en una cookie. Si utiliza cookies para almacenar símbolos (como un id. de usuario), considere la posibilidad de cifrar el valor de la cookie o agregar lógica para estar seguro de que nadie manipula el valor de la cookie.
La compatibilidad con bases de datos le permite:
- Identificar de forma exclusiva las solicitudes del explorador o el dispositivo cliente y asignarlas a un identificador único.
- Mantenga el estado relacionando la información almacenada con un id. exclusivo. Puede utilizar el id. exclusivo para consultar una base de datos con el fin de obtener información relacionada con ese id. A continuación, puede modificar la información y guardarla de nuevo en la base de datos para utilizarla en varias solicitudes de las mismas páginas del sitio u otras diferentes.
- Producir eventos adecuados. Una condición en la base de datos puede determinar la acción del sitio. Por ejemplo, si el usuario de un sitio Commerce intenta comprar algo que no está en stock, una consulta a la base de datos puede transmitirle al sitio Web que le pida al usuario que haga otra selección.
Para obtener más información acerca del uso de una base de datos para mantener el estado, vea Recomendaciones de administración de estado.
Vea también
Administración del estado de los formularios Web Forms | Guardar valores de páginas de formularios Web Forms mediante el estado de vista | Recomendaciones de administración de estado | Miembros de página | Administración de estado de ASP.NET | Estado de la aplicación | Estado de la sesión | HttpCookie (Clase)