HTTP este un protocol fără stare. Fiecare cerere este independentă, iar execuția și rezultatele sale nu sunt direct legate de cererea anterioară și de cererea ulterioară, și nu vor fi afectate direct de răspunsul la cererea anterioară și nici nu vor afecta direct răspunsul la cererea ulterioară.
De fapt, sistemul nostru permite adesea utilizatorilor să partajeze aceleași date (stare) între browserul client și serverul mai multe cereri, cum ar fi informațiile contului de autentificare ale utilizatorului. Prin urmare, ASP.NET oferă multe variabile pentru gestionarea stării: starea aplicației, starea sesiunii, starea vizualizării etc.
Obiectul HttpContext este doar pentru o singură cerere http.Proprietățile acestei clase includ și obiecte Request, obiecte Response, obiecte Session etc. Aceasta este colecția Items a clasei HttpContext, care conține un obiect hash table sub forma de cheie-valoare.
Mai întâi, să analizăm scopul HttpContext.Current.Items, care funcționează doar la o singură cerere de utilizator (HttpContext.Current.Items valabil pentru un singur HTTPRequest). Când această cerere este finalizată, colectarea de obiecte se va pierde atunci când informațiile serverului sunt trimise înapoi către browser. Obiectul Session este pentru sesiunea utilizatorului, adică acționează pe baza mai multor cereri ale utilizatorilor, iar informația se pierde după expirarea sesiunii.
Deoarece HttpContext.Current.Items are un ciclu de viață atât de scurt, în ce circumstanțe poate fi folosit? Se menționează aici că HttpContext.Current.Items poate fi folosit atunci când se partajează date între HttpModule și HTTPHandler, deoarece fiecare cerere a utilizatorului trece prin pipeline-ul de execuție HTTP HttpModule, HTTPHandler. Când implementezi metoda IHttpMoudle pentru a transmite informații către cererea utilizatorului prin HttpMoudle. Poți folosi HttpContext.Current.Items pentru a transfera date din diferite pagini de cerere și diferite HttpModule, dar odată ce cererea se încheie și datele sunt postate, datele din această colecție se vor pierde singure. Așa cum se vede în figura următoare:
În plus, când pagina serverului sare (Server.Execute/Server.Transfer), putem folosi HttpContext.Current.Items pentru a transmite date între cele două formulare.
Evident, dacă schimbi Server.Transfer în Response.Redirect, nu vei putea obține datele din HttpContext.Current.Items în noua pagină deoarece este o cerere Http diferită. System.NullReferenceException: Referința obiectului nu este setată ca instanța obiectului.
|