HTTP adalah protokol stateless. Setiap permintaan bersifat independen, dan eksekusi serta hasilnya tidak terkait langsung dengan permintaan sebelumnya dan permintaan berikutnya, dan tidak akan terpengaruh langsung oleh respons terhadap permintaan sebelumnya, juga tidak akan secara langsung memengaruhi respons terhadap permintaan berikutnya.
Faktanya, sistem kami sering mendukung pengguna untuk berbagi data (status) yang sama antara browser klien dan server beberapa permintaan, seperti informasi akun login pengguna. Oleh karena itu, ASP.NET menyediakan banyak variabel untuk mengelola status: status aplikasi, status sesi, status tampilan, dll.
Objek HttpContext hanya untuk satu permintaan http.Properti kelas ini juga mencakup objek Permintaan, objek Respons, objek Sesi, dll. Ini adalah koleksi Items dari kelas HttpContext, yang berisi objek tabel hash dalam bentuk key-value.
Pertama, mari kita lihat tujuan HttpContext.Current.Items, yang hanya berfungsi pada satu permintaan pengguna (HttpContext.Current.Items valid untuk satu HTTPRequest). Ketika permintaan ini selesai, koleksi item akan hilang saat informasi server dikirim kembali ke browser. Objek Sesi adalah untuk sesi pengguna, yaitu, ia bertindak pada beberapa permintaan pengguna, dan informasi hilang setelah sesi kedaluwarsa.
Karena HttpContext.Current.Items memiliki siklus hidup yang begitu singkat, dalam keadaan apa ia dapat digunakan? Perlu dicatat di sini bahwa HttpContext.Current.Items dapat digunakan saat berbagi data antara HttpModule dan HTTPHandler, karena setiap permintaan pengguna melewati alur runtime HTTP HttpModule, HTTPHandler. Saat Anda mengimplementasikan metode IHttpMoudle untuk meneruskan informasi ke permintaan pengguna melalui HttpMoudle. Anda dapat menggunakan HttpContext.Current.Items untuk mentransfer data di halaman permintaan yang berbeda dan HttpModules yang berbeda, tetapi setelah permintaan berakhir dan data diposting, data dalam koleksi ini akan hilang dengan sendirinya. Seperti yang ditunjukkan pada gambar berikut:
Selain itu, ketika halaman server melompat (Server.Execute/Server.Transfer), kita dapat menggunakan HttpContext.Current.Items untuk meneruskan data di antara dua formulir.
Jelas, jika Anda mengubah Server.Transfer ke Response.Redirect, Anda tidak akan bisa mendapatkan data di HttpContext.Current.Items di halaman baru karena ini adalah permintaan Http yang berbeda. System.NullReferenceException: Referensi objek tidak diatur ke instans objek.
|