HTTP yra protokolas be būsenos. Kiekviena užklausa yra nepriklausoma, o jos vykdymas ir rezultatai nėra tiesiogiai susiję su ankstesne užklausa ir vėlesne užklausa, o atsakymas į ankstesnę užklausą jai tiesiogiai neturės įtakos ir atsakymui į vėlesnę užklausą.
Tiesą sakant, mūsų sistema dažnai palaiko vartotojus dalytis tais pačiais duomenimis (būsena) tarp kliento naršyklės ir serverio keliomis užklausomis, pvz., vartotojo prisijungimo paskyros informacija. Todėl ASP.NET pateikia daug kintamųjų būsenai valdyti: programos būsena, seanso būsena, peržiūros būsena ir kt.
HttpContext objektas skirtas tik vienai http užklausai.Šios klasės savybės taip pat apima užklausos objektus, atsakymo objektus, sesijos objektus ir kt. Tai yra HttpContext klasės elementų rinkinys, kuriame yra maišos lentelės objektas rakto-reikšmės pavidalu.
Pirmiausia pažvelkime į HttpContext.Current.Items paskirtį, kuri veikia tik pagal vieną vartotojo užklausą (HttpContext.Current.Items galioja vienam HTTPRequest). Kai ši užklausa bus baigta, elementų rinkinys bus prarastas, kai serverio informacija bus siunčiama atgal į naršyklę. Seanso objektas skirtas vartotojo seansui, tai yra, jis veikia pagal kelias vartotojo užklausas, o pasibaigus seansui informacija prarandama.
Kadangi HttpContext.Current.Items turi tokį trumpą gyvavimo ciklą, kokiomis aplinkybėmis jis gali būti naudojamas? Čia pažymima, kad HttpContext.Current.Items gali būti naudojamas dalijantis duomenimis tarp HttpModule ir HTTPHandler, nes kiekviena vartotojo užklausa eina per HTTP vykdymo laiko vamzdyną HttpModule, HTTPHandler. Kai įdiegiate IHttpMoudle metodą, kad perduotumėte informaciją vartotojo užklausai per HttpMoudle. Galite naudoti HttpContext.Current.Items duomenims perkelti į skirtingus užklausų puslapius ir skirtingus HttpModules, tačiau pasibaigus užklausai ir užregistravus duomenis, šio rinkinio duomenys bus prarasti patys. Kaip parodyta šiame paveikslėlyje:
Be to, kai serverio puslapis šokinėja (Server.Execute/Server.Transfer), galime naudoti HttpContext.Current.Items, kad perduotume duomenis tarp dviejų formų.
Akivaizdu, kad jei pakeisite Server.Transfer į Response.Redirect, negalėsite gauti HttpContext.Current.Items duomenų naujame puslapyje, nes tai yra kita Http užklausa. System.NullReferenceException: objekto nuoroda nenustatyta objekto egzemplioriui.
|