HTTP to protokół bezstanowy. Każde żądanie jest niezależne, a jego wykonanie i wyniki nie są bezpośrednio powiązane z poprzednim żądaniem i kolejnym żądaniem, nie będą bezpośrednio wpływane przez odpowiedź na poprzednie żądanie, ani bezpośrednio na odpowiedź na kolejne żądanie.
W rzeczywistości nasz system często umożliwia użytkownikom udostępnianie tych samych danych (stanu) między przeglądarką klienta a serwerem w wielu żądaniach, takich jak dane konta logowania użytkownika. Dlatego ASP.NET udostępnia wiele zmiennych do zarządzania stanem: stan aplikacji, stan sesji, stan widoku itd.
Obiekt HttpContext służy tylko do pojedynczego żądania http.Właściwości tej klasy obejmują także obiekty Request, Response, Session itd. Jest to kolekcja Items klasy HttpContext, która zawiera obiekt tabeli skrótu w postaci klucz-wartość.
Najpierw przyjrzyjmy się celowi HttpContext.Current.Items, który działa tylko na jedno żądanie użytkownika (HttpContext.Current.Items ważne dla pojedynczego HTTPRequest). Po zakończeniu tego żądania kolekcja elementów zostanie utracona podczas przesyłania informacji o serwerze z powrotem do przeglądarki. Obiekt Session służy do sesji użytkownika, czyli działa na wiele żądań użytkownika, a informacje te są tracone po zakończeniu sesji.
Ponieważ HttpContext.Current.Items ma tak krótki cykl życia, w jakich okolicznościach można go używać? Zauważono tutaj, że HttpContext.Current.Items można używać podczas udostępniania danych między HttpModule a HTTPHandler, ponieważ każde żądanie użytkownika przechodzi przez pipeline wykonawczą HTTP HttpModule, HTTPHandler. Gdy implementujesz metodę IHttpMoudle, aby przekazać informacje użytkownikowi, zażądasz przez HttpMoudle. Możesz użyć HttpContext.Current.Items do przesyłania danych na różnych stronach żądań i różnych HttpModules, ale gdy żądanie się zakończy i dane zostaną opublikowane, dane w tej kolekcji same zostaną utracone. Jak pokazano na poniższym rysunku:
Dodatkowo, gdy strona serwera przeskakuje (Server.Execute/Server.Transfer), możemy użyć HttpContext.Current.Items do przesyłania danych między dwoma formularzami.
Oczywiście, jeśli zmienisz Server.Transfer na Response.Redirect, nie będziesz mógł pobrać danych w HttpContext.Current.Items na nowej stronie, ponieważ jest to inne żądanie HTTP. System.NullReferenceException: Referencja obiektu nie jest ustawiona na instancję obiektu.
|