HTTP on olekuta protokoll. Iga päring on sõltumatu ning selle täitmine ja tulemused ei ole otseselt seotud eelmise ja järgneva päringuga, ning see ei ole otseselt mõjutatud eelmise päringu vastusest ega ka vastust järgmisele päringule.
Tegelikult võimaldab meie süsteem sageli kasutajatel jagada sama andmeid (olekut) kliendibrauseri ja serveri vahel mitme päringu puhul, näiteks kasutaja sisselogimiskonto andmeid. Seetõttu pakub ASP.NET palju muutujaid oleku haldamiseks: rakenduse olek, sessiooni seisund, vaate seisund jne.
HttpContext objekt on mõeldud ainult ühe http-päringu jaoks.Selle klassi omadused hõlmavad ka Request objekte, Response objekte, Session objekte jne. See on HttpContext klassi Items kogu, mis sisaldab räsi tabeli objekti võtme-väärtuse kujul.
Esmalt vaatame HttpContext.Current.Items eesmärki, mis töötab ainult ühe kasutaja päringu korral (HttpContext.Current.Items kehtib ühe HTTPRequesti puhul). Kui see päring on lõpetatud, kaob esemete kogu, kui serveri info saadetakse brauserisse tagasi. Sessiooni objekt on kasutaja sessiooni jaoks, st see tegutseb mitme kasutajapäringu peale ning info kaob pärast sessiooni lõppu.
Kuna HttpContext.Current.Itemsil on nii lühike elutsükkel, millistel tingimustel seda saab kasutada? Siin märgitakse, et HttpContext.Current.Items saab kasutada andmete jagamisel HttpModule'i ja HTTPHandleri vahel, kuna iga kasutajapäring läbib HTTP käitusaegse torujuhtme HttpModule, HTTPHandler. Kui rakendad IHttpMoudle meetodit, et edastada kasutaja päringule infot HttpMoudle'i kaudu. Saad kasutada HttpContext.Current.Items andmete edastamiseks erinevatesse päringulehtedesse ja erinevatesse HttpModule'itesse, kuid kui päring lõpeb ja andmed on postitatud, kaovad selle kogumiku andmed iseenesest. Nagu näidatud järgmises joonises:
Lisaks, kui serveri leht hüppab (Server.Execute/Server.Transfer), saame kasutada HttpContext.Current.Items andmete edastamiseks kahe vormi vahel.
Ilmselgelt, kui muudad Server.Transferi Response.Redirectiks, ei saa sa uuel lehel HttpContext.Current.Items andmeid kätte, sest tegemist on erineva Http-päringuga. System.NullReferenceException: Objekti viide ei ole objekti eksemplarile seatud.
|