HTTP, durumsuz bir protokoldür. Her istek bağımsızdır ve yürütülmesi ile sonuçları önceki talep ve sonraki talekle doğrudan ilgili değildir; önceki talebe verilen yanıttan doğrudan etkilenmez ve sonraki talebe verilen yanıtı doğrudan etkilemez.
Aslında, sistemimiz kullanıcıların aynı verileri (durumları) istemci tarayıcı ile sunucu arasında birden fazla istek paylaşmasını destekler; örneğin kullanıcı giriş hesabı bilgileri. Bu nedenle, ASP.NET durumu yönetmek için birçok değişken sağlar: uygulama durumu, oturum durumu, görünüm durumu vb.
HttpContext nesnesi yalnızca tek bir http isteği içindir.Bu sınıfın özellikleri arasında Talep Nesneleri, Yanıt nesneleri, Oturum nesneleri vb. de bulunur. Bu, anahtar-değer biçiminde bir hash tablosu nesnesi içeren HttpContext sınıfının Items koleksiyonudur.
Öncelikle, yalnızca tek bir kullanıcı isteği üzerine çalışan HttpContext.Current.Items'ın amacına bakalım (HttpContext.Current.Items tek bir HTTPRequest için geçerlidir). Bu talep tamamlandığında, sunucu bilgileri tarayıcıya geri gönderildiğinde öğe koleksiyonu kaybolur. Oturum nesnesi kullanıcının oturumu içindir; yani, birden fazla kullanıcı isteği üzerine hareket eder ve oturum süresi dolduğunda bilgi kaybolur.
HttpContext.Current.Items bu kadar kısa bir yaşam döngüsü olduğuna göre, hangi koşullarda kullanılabilir? Burada, her kullanıcı isteği HTTP çalışma zamanı boru hattı HttpModule, HTTPHandler üzerinden geçtiği için HttpContext.Current.Items (HttpContext.Current.Items) verilerini paylaşırken kullanılabileceği belirtilmiştir. IHttpMoudle yöntemini uyguladığınızda, kullanıcı isteğine HttpMoudle üzerinden bilgi ilettiğinizde. Farklı istek sayfalarında ve farklı HttpModule'lerde veri aktarmak için HttpContext.Current.Items kullanabilirsiniz, ancak istek sona erdiğinde ve veri yayınlandıktan sonra, bu koleksiyondaki veriler kendi başına kaybolur. Aşağıdaki şekilde gösterildiği gibi:
Ayrıca, sunucu sayfası atladığında (Server.Execute/Server.Transfer), HttpContext.Current.Items kullanarak iki form arasında veri aktarabiliriz.
Elbette, Server.Transfer'i Response.Redirect olarak değiştirirseniz, yeni sayfada HttpContext.Current.Items içindeki verileri alamazsınız çünkü bu farklı bir Http isteğidir. System.NullReferenceException: Nesne referansı, nesnenin örneğine ayarlanmamıştır.
|