A HTTP egy állapot nélküli protokoll. Minden kérés független, és a végrehajtása, valamint az eredményei nem kapcsolódnak közvetlenül az előző kéréshez és a következő kéréshez, és közvetlenül nem befolyásolja az előző kérésre adott válasz, és nem befolyásolja közvetlenül a következő kérésre adott választ.
Valójában rendszerünk gyakran támogatja a felhasználóknak, hogy ugyanazt az adatot (állapotot) több kéréssel megosszák a kliens böngésző és a szerver között, például a felhasználó bejelentkezési fiókadatait. Ezért ASP.NET számos változót biztosít az állapot kezelésére: alkalmazás állapot, session állapot, view állapot stb.
A HttpContext objektum csak egyetlen HTTP kérésre vonatkozik.Ennek az osztálynak a tulajdonságai közé tartoznak a Kérés objektumok, Válasz objektumok, Session objektumok stb. Ez az HttpContext osztály Items gyűjteménye, amely kulcsérték formájában tartalmaz hash tábla-objektumot.
Először nézzük meg a HttpContext.Current.Items célját, amely csak egyetlen felhasználói kérésre működik (a HttpContext.Current.Items érvényes egyetlen HTTPRequestre). Amikor ez a kérés befejeződik, az elemgyűjtemény elveszik, amikor a szerver adatait visszaküldik a böngészőnek. A Session objektum a felhasználó ülésére vonatkozik, vagyis több felhasználói kérésre reagál, és az információ elveszik a session lejárása után.
Mivel a HttpContext.Current.Items ilyen rövid életciklusú, milyen körülmények között használható? Itt megjegyezzük, hogy a HttpContext.Current.Items használható adatok megosztásához a HttpModule és a HTTPHandler között, mivel minden felhasználói kérés a HTTP futási idejű HttpModule (HTTPHandler) csővezetéken keresztül megy. Amikor az IHttpMoudle módszert implementálod, hogy az információt továbbítsd a felhasználói kérésnek a HttpMoudle-on keresztül. Használhatod a HttpContext.Current.Items fájlokat különböző kérésoldalakon és különböző HttpModulokon történő átvitelre, de amikor a kérés véget ér és az adatokat feltöltik, a gyűjteményben lévő adatok önmaguktól elvesznek. Ahogy az alábbi ábrán látható:
Ezen felül, amikor a szerver oldala ugrik (Server.Execute/Server.Transfer), használhatjuk a HttpContext.Current.Items csatornát az adatok átadására a két űrlap között.
Nyilvánvalóan, ha a Server.Transfer-et Response.Redirect-re változtatod, nem fogod tudni megkapni az adatokat a HttpContext.Current.Items új oldalon, mert az egy másik Http kérés. System.NullReferenceException: Az objektumhivatkozás nincs beállítva az objektum példányára.
|