HTTP é um protocolo sem estado. Cada solicitação é independente, e sua execução e resultados não estão diretamente relacionados à solicitação anterior e à subsequente, e não será diretamente afetada pela resposta à solicitação anterior, nem afetará diretamente a resposta à solicitação subsequente.
Na verdade, nosso sistema frequentemente permite que os usuários compartilhem os mesmos dados (estado) entre o navegador cliente e o servidor múltiplas requisições, como as informações da conta de login do usuário. Portanto, ASP.NET fornece muitas variáveis para gerenciar o estado: estado da aplicação, estado da sessão, estado da visualização, etc.
O objeto HttpContext é apenas para uma única requisição http.As propriedades dessa classe também incluem objetos Request, Response objects, Session objects, etc. Esta é a coleção Items da classe HttpContext, que contém um objeto de tabela hash na forma de chave-valor.
Primeiro, vamos analisar o propósito do HttpContext.Current.Items, que funciona apenas com uma única solicitação de usuário (HttpContext.Current.Items válido para um único HTTPRequest). Quando essa solicitação é concluída, a coleta de itens será perdida quando as informações do servidor forem enviadas de volta ao navegador. O objeto Session é para a sessão do usuário, ou seja, ele atua em múltiplas requisições do usuário, e as informações são perdidas após o término da sessão.
Como o HttpContext.Current.Items tem um ciclo de vida tão curto, sob quais circunstâncias ele pode ser usado? Observa-se aqui que HttpContext.Current.Items pode ser usado ao compartilhar dados entre HttpModule e HTTPHandler, pois toda solicitação de usuário passa pelo pipeline de execução HTTP HttpModule, HTTPHandler. Quando você implementa o método IHttpMoudle para passar informações ao pedido do usuário via HttpMoudle. Você pode usar o HttpContext.Current.Items para transferir dados em diferentes páginas de requisição e diferentes HttpModules, mas uma vez que a solicitação termina e os dados são postados, os dados dessa coleção serão perdidos por si só. Como mostrado na figura a seguir:
Além disso, quando a página do servidor pula (Server.Execute/Server.Transfer), podemos usar o HttpContext.Current.Items para passar dados entre os dois formulários.
Obviamente, se você mudar Server.Transfer para Response.Redirect, não conseguirá obter os dados em HttpContext.Current.Items na nova página porque é uma requisição Http diferente. System.NullReferenceException: A referência do objeto não é definida para a instância do objeto.
|