HTTP on tilaton protokolla. Jokainen pyyntö on itsenäinen, eikä sen toteutus ja tulokset liity suoraan edelliseen pyyntöön tai seuraavaan pyyntöön, eikä se vaikuta suoraan edellisen pyynnön vastaukseen, eikä se vaikuta suoraan seuraavan pyynnön vastaukseen.
Itse asiassa järjestelmämme tukee usein käyttäjiä jakamaan saman datan (tilan) asiakasselaimen ja palvelimen välillä useiden pyyntöjen yhteydessä, kuten käyttäjän kirjautumistilin tiedot. Siksi ASP.NET tarjoaa monia muuttujia tilan hallintaan: sovelluksen tila, istuntotila, näkymätila jne.
HttpContext-objekti on tarkoitettu vain yhdelle http-pyynnölle.Tämän luokan ominaisuuksiin kuuluvat myös Request-objektit, Response-objektit, Session-objektit jne. Tämä on Its-kokoelma HttpContext-luokasta, joka sisältää hajautustaulun objektin avainarvon muodossa.
Ensiksi tarkastellaan HttpContext.Current.Itemsin tarkoitusta, joka toimii vain yhdellä käyttäjäpyynnöllä (HttpContext.Current.Items on voimassa yhdelle HTTPRequestille). Kun tämä pyyntö on valmis, kohdekokoelma katoaa, kun palvelintiedot lähetetään takaisin selaimeen. Session-objekti on käyttäjän istunnolle, eli se reagoi useisiin käyttäjäpyyntöihin, ja tieto katoaa istunnon päätyttyä.
Koska HttpContext.Current.Itemsin elinkaari on niin lyhyt, missä olosuhteissa sitä voidaan käyttää? Tässä todetaan, että HttpContext.Current.Items -tiedostoja voidaan käyttää jaettaessa dataa HttpModulin ja HTTPHandlerin välillä, koska jokainen käyttäjäpyyntö kulkee HTTP-ajonaikaisen HttpModule, HTTPHandler, -putkiston kautta. Kun otat käyttöön IHttpMoudle-menetelmän, joka välittää tiedot käyttäjän pyynnölle HttpMoudlen kautta. Voit käyttää HttpContext.Current.Items-tiedostoa siirtääksesi dataa eri pyyntösivuilla ja eri HttpModuleissa, mutta kun pyyntö päättyy ja data julkaistaan, tämän kokoelman data katoaa itsestään. Kuten seuraavassa kuvassa näkyy:
Lisäksi, kun palvelinsivu hyppää (Server.Execute/Server.Transfer), voimme käyttää HttpContext.Current.Items-tiedostoa datan välittämiseen näiden kahden lomakkeen välillä.
Tietenkin, jos vaihdat Server.Transferin Response.Redirectiksi, et voi saada tietoja HttpContext.Current.Items -tiedostosta uudella sivulla, koska kyseessä on eri Http-pyyntö. System.NullReferenceException: Olion viittaus ei ole asetettu objektin instanssille.
|