HTTP er en tilstandsløs protokol. Hver anmodning er uafhængig, og dens udførelse og resultater er ikke direkte relateret til den tidligere anmodning og den efterfølgende anmodning, og den vil ikke blive direkte påvirket af svaret på den forrige anmodning, ej heller vil den direkte påvirke svaret på den efterfølgende anmodning.
Faktisk understøtter vores system ofte brugere i at dele de samme data (tilstand) mellem klientbrowseren og serveren med flere forespørgsler, såsom brugerens loginoplysninger. Derfor tilbyder ASP.NET mange variable til at styre tilstanden: applikationstilstand, sessionstilstand, visningstilstand osv.
HttpContext-objektet er kun til en enkelt HTTP-anmodning.Egenskaberne for denne klasse inkluderer også Request-objekter, Response-objekter, Session-objekter osv. Dette er Items-samlingen af HttpContext-klassen, som indeholder et hash-tabelobjekt i form af nøgle-værdi.
Lad os først se på formålet med HttpContext.Current.Items, som kun virker på en enkelt brugerforespørgsel (HttpContext.Current.Items, gyldig for en enkelt HTTPRequest). Når denne anmodning er afsluttet, vil indsamlingen af genstande gå tabt, når serverinformationen sendes tilbage til browseren. Session-objektet er for brugerens session, det vil sige, det handler på flere brugeranmodninger, og informationen går tabt, når sessionen udløber.
Da HttpContext.Current.Items har så kort en levetid, under hvilke omstændigheder kan den så bruges? Det bemærkes her, at HttpContext.Current.Items kan bruges, når data deles mellem HttpModule og HTTPHandler, fordi hver brugerforespørgsel går gennem HTTP-runtime-pipelinen HttpModule, HTTPHandler. Når du implementerer IHttpMoudle-metoden til at sende information til brugerforespørgslen via HttpMoudle. Du kan bruge HttpContext.Current.Items til at overføre data på forskellige anmodningssider og forskellige HttpModules, men når anmodningen slutter og dataene er lagt op, vil dataene i denne samling gå tabt af sig selv. Som vist i følgende figur:
Derudover kan vi, når serversiden hopper (Server.Execute/Server.Transfer), bruge HttpContext.Current.Items til at overføre data mellem de to formularer.
Selvfølgelig, hvis du ændrer Server.Transfer til Response.Redirect, vil du ikke kunne få dataene i HttpContext.Current.Items på den nye side, fordi det er en anden HTTP-anmodning. System.NullReferenceException: Objektreferencen er ikke sat til objektets instans.
|