HTTP je protokol brez stanja. Vsaka zahteva je neodvisna, njena izvedba in rezultati pa niso neposredno povezani s prejšnjo in naslednjo zahtevo, prav tako ne bodo neposredno prizadeti z odgovorom na prejšnjo zahtevo, prav tako ne neposredno na odgovor na naslednjo zahtevo.
Pravzaprav naš sistem pogosto podpira uporabnike, da med brskalnikom odjemalca in strežnikom delijo iste podatke (stanje) za več zahtev, kot so podatki uporabniškega prijavnega računa. Zato ASP.NET zagotavlja veliko spremenljivk za upravljanje stanja: stanje aplikacije, stanje seje, stanje ogleda itd.
Objekt HttpContext je namenjen le eni HTTP zahtevi.Lastnosti tega razreda vključujejo tudi objekte Request, Response, Session objekte itd. To je zbirka Items razreda HttpContext, ki vsebuje objekt zgoščevalne tabele v obliki ključ-vrednost.
Najprej si poglejmo namen HttpContext.Current.Items, ki deluje le na eno uporabniško zahtevo (HttpContext.Current.Items velja za eno HTTPRequest). Ko je ta zahteva izpolnjena, bo zbirka elementov izgubljena, ko se informacije o strežniku pošljejo nazaj v brskalnik. Objekt Seje je za uporabnikovo sejo, torej deluje na več uporabniških zahtev, informacije pa se izgubijo po poteku seje.
Ker ima HttpContext.Current.Items tako kratek življenjski cikel, pod kakšnimi pogoji ga je mogoče uporabiti? Tukaj je omenjeno, da se HttpContext.Current.Items lahko uporablja pri deljenju podatkov med HttpModule in HTTPHandler, saj vsaka uporabniška zahteva poteka skozi HTTP runtime pipeline HttpModule, HTTPHandler. Ko implementirate metodo IHttpMoudle za posredovanje informacij uporabniški zahtevi preko HttpMoudle. Uporabite lahko HttpContext.Current.Items za prenos podatkov na različnih straneh z zahtevami in različnih HttpModules, vendar ko zahteva konča in so podatki objavljeni, se podatki v tej zbirki sami izgubijo. Kot je prikazano na naslednji sliki:
Poleg tega, ko strežniška stran skoči (Server.Execute/Server.Transfer), lahko uporabimo HttpContext.Current.Items za prenos podatkov med obema obrazcema.
Seveda, če spremenite Server.Transfer v Response.Redirect, podatkov v HttpContext.Current.Items na novi strani ne boste mogli dobiti, ker gre za drugačno HTTP zahtevo. System.NullReferenceException: Referenca objekta ni nastavljena na instanco objekta.
|