HTTP es un protocolo sin estado. Cada solicitud es independiente, y su ejecución y resultados no están directamente relacionados con la solicitud anterior ni con la siguiente, y no se verá afectada directamente por la respuesta a la solicitud anterior, ni afectará directamente la respuesta a la solicitud posterior.
De hecho, nuestro sistema suele permitir que los usuarios compartan los mismos datos (estado) entre el navegador cliente y el servidor múltiples solicitudes, como la información de la cuenta de inicio de sesión del usuario. Por lo tanto, ASP.NET proporciona muchas variables para gestionar el estado: estado de la aplicación, estado de sesión, estado de vista, etc.
El objeto HttpContext es solo para una única solicitud http.Las propiedades de esta clase también incluyen objetos Request, objetos Response, objetos Session, etc. Esta es la colección Items de la clase HttpContext, que contiene un objeto de tabla hash en forma de clave-valor.
Primero, veamos el propósito de HttpContext.Current.Items, que solo funciona con una solicitud de usuario (HttpContext.Current.Items válido para un único HTTPRequest). Cuando esta solicitud se completa, la colección de elementos se perderá cuando la información del servidor se envíe de vuelta al navegador. El objeto Sesión es para la sesión del usuario, es decir, actúa sobre múltiples solicitudes de usuario y la información se pierde tras expirar la sesión.
Dado que HttpContext.Current.Items tiene un ciclo de vida tan corto, ¿bajo qué circunstancias puede usarse? Se señala aquí que HttpContext.Current.Items puede usarse al compartir datos entre HttpModule y HTTPHandler, porque cada solicitud de usuario pasa por la canalización de ejecución HTTP HttpModule, HTTPHandler. Cuando implementas el método IHttpMoudle para pasar información a la solicitud del usuario a través de HttpMoudle. Puedes usar HttpContext.Current.Items para transferir datos en diferentes páginas de solicitud y distintos HttpModules, pero una vez que la solicitud termina y los datos se publican, los datos de esta colección se perderán por sí solos. Como se muestra en la siguiente figura:
Además, cuando la página del servidor salta (Server.Execute/Server.Transfer), podemos usar HttpContext.Current.Items para pasar datos entre los dos formularios.
Obviamente, si cambias Server.Transfer a Response.Redirect, no podrás obtener los datos en HttpContext.Current.Items en la nueva página porque es una solicitud Http diferente. System.NullReferenceException: La referencia al objeto no se establece como la instancia del objeto.
|