HTTP è un protocollo senza stato. Ogni richiesta è indipendente, e la sua esecuzione e i suoi risultati non sono direttamente collegati alla richiesta precedente e a quella successiva, e non saranno direttamente influenzati dalla risposta alla richiesta precedente, né influenzeranno direttamente la risposta alla richiesta successiva.
In effetti, il nostro sistema spesso supporta gli utenti per condividere gli stessi dati (stato) tra il browser client e il server per più richieste, come le informazioni dell'account di accesso dell'utente. Pertanto, ASP.NET fornisce molte variabili per gestire lo stato: stato dell'applicazione, stato della sessione, stato della vista, ecc.
L'oggetto HttpContext è solo per una singola richiesta http.Le proprietà di questa classe includono anche oggetti Request, oggetti Response, oggetti Session, ecc. Questa è la collezione Items della classe HttpContext, che contiene un oggetto tavola hash sotto forma di chiave-valore.
Prima di tutto, vediamo lo scopo di HttpContext.Current.Items, che funziona solo su una singola richiesta utente (HttpContext.Current.Items valido per un singolo HTTPRequest). Quando questa richiesta viene completata, la raccolta degli elementi andrà persa quando le informazioni del server verranno inviate al browser. L'oggetto Session è per la sessione dell'utente, cioè agisce su più richieste utente e le informazioni vengono perse dopo la scadenza della sessione.
Dato che HttpContext.Current.Items ha un ciclo di vita così breve, in quali circostanze può essere utilizzato? Si nota qui che HttpContext.Current.Items può essere utilizzato quando si condividono dati tra HttpModule e HTTPHandler, poiché ogni richiesta utente passa attraverso la pipeline di esecuzione HTTP HttpModule, HTTPHandler. Quando implementi il metodo IHttpMoudle per passare informazioni alla richiesta dell'utente tramite HttpMoudle. Puoi usare HttpContext.Current.Items per trasferire dati in diverse pagine di richiesta e diversi HttpModule, ma una volta terminata la richiesta e i dati pubblicati, i dati in questa raccolta andranno persi da soli. Come mostrato nella figura seguente:
Inoltre, quando la pagina server salta (Server.Execute/Server.Transfer), possiamo usare HttpContext.Current.Items per passare dati tra i due moduli.
Ovviamente, se cambi Server.Transfer in Response.Redirect, non potrai ottenere i dati in HttpContext.Current.Items nella nuova pagina perché si tratta di una richiesta Http diversa. System.NullReferenceException: Il riferimento all'oggetto non è impostato sull'istanza dell'oggetto.
|