Hypertext Transfer Protocol (HTTP) adalah protokol tanpa kewarganegaraan. Ketika klien terputus dari server, mesin ASP.NET membuang objek halaman. Dengan cara ini, setiap aplikasi web dapat diskalakan untuk melayani permintaan dalam jumlah besar secara bersamaan tanpa menghabiskan memori server.
Namun, beberapa teknik diperlukan untuk menyimpan informasi di antara permintaan dan mengambilnya kembali saat diperlukan. Informasi ini disebut status, yang merupakan nilai saat ini dari semua kontrol dan variabel yang digunakan oleh pengguna saat ini dalam sesi saat ini.
ASP.NET mengelola empat negara:
keadaan tampilan
keadaan kontrol
keadaan sesi
Status aplikasi
Status tampilan adalah status halaman dan semua kontrolnya. Itu tetap tidak berubah melalui umpan balik kerangka ASP.NET.
Ketika halaman dikirim kembali ke klien, properti dan kontrol perubahan halaman ini ditentukan dan disimpan dalam nilai kolom input tersembunyi bernama _VIEWSTATE. Ketika halaman diposkan kembali, bidang _VIEWSTATE dikirim ke server dengan permintaan HTTP.
Status tampilan dapat diaktifkan atau dinonaktifkan untuk:
Seluruh aplikasi : Setel properti EnableViewState bagian di file web.config.
Halaman : Setel properti EnableViewState dari perintah halaman ke <%@ Page Language="C#" EnableViewState="false" %>
Kontrol : Menyetel properti control.EnableViewState.
Hal ini dilakukan dengan menggunakan objek status tampilan, yang ditentukan oleh kelas StateBag yang ditentukan oleh sekumpulan item status tampilan. StateBag adalah struktur data yang berisi pasangan nilai properti dan disimpan sebagai string yang terkait dengan suatu objek.
Kelas StateBag memiliki properti berikut:
milik | menggambarkan |
---|---|
Barang (nama) | Nilai status tampilan dengan nama yang ditentukan, yang merupakan properti default StateBag. |
Menghitung | Nama item dalam koleksi status. |
Kunci | Kumpulan kunci untuk semua item dalam koleksi. |
Nilai-nilai | Kumpulan nilai untuk semua item dalam koleksi. |
Kelas StateBag memiliki metode berikut:
metode | menggambarkan |
---|---|
Tambahkan (nama, nilai) | Menambahkan item ke koleksi kondisi tampilan, memperbarui item yang ada. |
Jernih | Menghapus semua item dari koleksi. |
Sama dengan (Objek) | Menentukan apakah objek yang ditentukan sama dengan objek saat ini. |
Menyelesaikan | Memungkinkan sumber daya dilepaskan dan operasi pembersihan lainnya dilakukan. |
DapatkanEnumerator | Mengembalikan penghitung pasangan kunci/nilai untuk objek StateItem duplikat yang disimpan dalam objek StateBag. |
Dapatkan Tipe | Dapatkan tipe instance saat ini. |
AdalahItemKotor | Periksa objek yang disimpan di StateBag untuk memastikan apakah objek tersebut telah dimodifikasi. |
Hapus (nama) | Hapus item khusus. |
Setel Kotor | Menyetel status objek StateBag dan properti Dirty dari setiap objek StateItem yang ada di dalamnya. |
SetItemKotor | Menyetel properti Dirty untuk objek StateItem yang ditentukan di objek StateBag. |
KeString | Mengembalikan string yang mewakili objek paket status. |
Contoh berikut mengilustrasikan konsep string yang menyimpan status tampilan.
Mari kita simpan penghitung yang dapat bertambah setiap kali halaman dipanggil kembali dengan mengklik tombol pada halaman tersebut. Kontrol label menampilkan nilai penghitung.
Kode file tag terlihat seperti ini:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="statedemo._Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <h3>View State demo</h3> Page Counter: <asp:Label ID="lblCounter" runat="server" /> <asp:Button ID="btnIncrement" runat="server" Text="Add Count" onclick="btnIncrement_Click" /> </div> </form> </body></html>
File di belakang kode untuk contoh ini terlihat seperti ini:
public partial class _Default : System.Web.UI.Page{ public int counter { get { if (ViewState["pcounter"] != null) { return ((int)ViewState["pcounter"]); } else { return 0; } } set { ViewState["pcounter"] = value; } } protected void Page_Load(object sender, EventArgs e) { lblCounter.Text = counter.ToString(); counter++; }}
Ini akan menghasilkan hasil sebagai berikut:
Status kontrol tidak dapat diubah, diakses, atau dinonaktifkan secara langsung.
Saat pengguna menyambung ke situs web ASP.NET, objek sesi baru dibuat. Ketika status sesi diaktifkan, status sesi baru dibuat untuk setiap permintaan baru. Objek status sesi ini menjadi bagian dari lingkungan runtime dan tersedia melalui halaman.
Status sesi biasanya digunakan untuk menyimpan data aplikasi seperti inventaris, daftar pemasok, catatan pelanggan, atau keranjang belanja. Itu dapat menyimpan informasi pengguna dan informasi preferensi mereka, dan menyimpan jalur pengguna yang belum diputuskan.
Sesi diidentifikasi dan dilacak oleh SessionID 120-bit, diteruskan dari klien ke server dan dikembalikan sebagai cookie atau URL yang dimodifikasi. SessionID bersifat unik dan acak secara global.
Objek status sesi dibuat oleh kelas HttpSessionState, yang mendefinisikan kumpulan item status sesi.
Kelas HttpSessionState memiliki properti berikut:
milik | menggambarkan |
---|---|
ID Sesi | Pengidentifikasi sesi unik. |
Barang (nama) | Nilai item status sesi dengan nama yang ditentukan, yang merupakan properti default kelas HttpSessionState. |
Menghitung | Jumlah item dalam koleksi status sesi. |
Waktu Habis | Mendapatkan dan menetapkan jumlah waktu, dalam menit, yang diperbolehkan antar permintaan sebelum penyedia menghentikan status sesi. |
Kelas HttpSessionState memiliki metode berikut:
metode | menggambarkan |
---|---|
Tambahkan (nama, nilai) | Menambahkan item baru ke koleksi status sesi. |
Jernih | Menghapus semua item dari koleksi status sesi. |
Hapus (nama) | Menghapus item tertentu dari kumpulan status sesi. |
Hapus semua | Menghapus semua kunci dan nilai dari kumpulan status sesi. |
HapusPada | Menghapus item pada indeks yang ditentukan dari kumpulan status sesi. |
Objek status sesi adalah pasangan nama-nilai yang dapat menyimpan dan mengambil informasi dari objek status sesi. Demikian pula, Anda dapat menggunakan kode berikut:
void StoreSessionInfo(){ String fromuser = TextBox1.Text; Session["fromuser"] = fromuser;}void RetrieveSessionInfo(){ String fromuser = Session["fromuser"]; Label1.Text = fromuser;}
Kode di atas hanya menyimpan string dalam objek kamus sesi, namun dapat menyimpan semua tipe data primitif dan array yang terdiri dari tipe data primitif, DataSet, DataTable, HashTable, dan objek gambar, serta objek apa pun yang ditentukan pengguna yang mewarisi dari Jenis objek yang dapat diserialkan.
Contoh berikut mengilustrasikan konsep penyimpanan status sesi. Ada dua tombol pada halaman: tombol kotak teks untuk memasukkan string dan tombol label untuk menampilkan teks yang disimpan dari sesi terakhir. Kode file tag terlihat seperti ini:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title> Untitled Page </title> </head> <body> <form id="form1" runat="server"> <div> <table> <tr> <td> <asp:Label ID="lblstr" runat="server" Text="Enter a String" > </asp:Label> </td> <td> <asp:TextBox ID="txtstr" runat="server"> </asp:TextBox> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> <asp:Button ID="btnnrm" runat="server" Text="No action button" /> </td> <td> <asp:Button ID="btnstr" runat="server" OnClick="btnstr_Click" Text="Submit the String" /> </td> </tr> <tr> <td> </td> <td> </td> </tr> <tr> <td> <asp:Label ID="lblsession" runat="server" > </asp:Label> </td> <td> </td> </tr> <tr> <td> <asp:Label ID="lblshstr" runat="server"> </asp:Label> </td> <td> </td> </tr> </table> </div> </form> </body></html>
Seharusnya terlihat seperti ini pada tampilan desain:
Kode latar belakangnya adalah sebagai berikut:
public partial class _Default : System.Web.UI.Page { String mystr; protected void Page_Load(object sender, EventArgs e) { this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; } protected void btnstr_Click(object sender, EventArgs e) { this.mystr = this.txtstr.Text; this.Session["str"] = this.txtstr.Text; this.lblshstr.Text = this.mystr; this.lblsession.Text = (String)this.Session["str"]; }}
Jalankan file dan lihat cara kerjanya:
Aplikasi ASP.NET adalah kumpulan semua halaman web, kode, dan file lain dalam satu direktori virtual di server Web. Ketika informasi disimpan dalam status aplikasi, informasi tersebut tersedia untuk semua pengguna.
Untuk menyediakan penggunaan status aplikasi, ASP.NET membuat objek status aplikasi untuk setiap aplikasi dari kelas HttpApplicationState dan menyimpan objek tersebut di memori server. Objek ini diwakili oleh file kelas global.asax.
Status aplikasi terutama digunakan untuk menyimpan penghitung, data statistik lainnya, dan semua data aplikasi seperti tarif pajak dan tarif diskon, serta untuk menyimpan jalur pengguna ke situs web.
Kelas HttpApplicationState memiliki properti berikut:
milik | menggambarkan |
---|---|
Barang (nama) | Nilai entri aplikasi dengan nama tertentu, yang merupakan properti default HttpApplicationState. |
Menghitung | Jumlah item dalam koleksi negara aplikasi. |
Kelas HttpApplicationState memiliki metode berikut:
metode | menggambarkan |
---|---|
Tambahkan (nama, nilai) | Menambahkan item baru ke koleksi status aplikasi. |
Jernih | Menghapus semua item dari koleksi status aplikasi. |
Hapus (nama) | Menghapus item tertentu dari koleksi status aplikasi. |
Hapus semua | Menghapus semua objek dalam koleksi HttpApplicationState. |
HapusPada | Menghapus objek HttpApplicationState dari koleksi yang ditemukan oleh indeks. |
Kunci() | Kunci kumpulan status aplikasi sehingga hanya pengguna saat ini yang dapat mengaksesnya. |
Membuka kunci() | Buka kunci kumpulan status aplikasi sehingga semua pengguna dapat mengaksesnya. |
Data status aplikasi biasanya dikelola oleh penangan yang ditulis untuk kejadian:
Aplikasi terbuka
Lamaran berakhir
kesalahan aplikasi
Sesi dimulai
sesi berakhir
Cuplikan kode berikut menunjukkan sintaks dasar untuk menyimpan informasi status aplikasi:
Void Application_Start(object sender, EventArgs e){ Application["startMessage"] = "The application has started.";}Void Application_End(object sender, EventArgs e){ Application["endtMessage"] = "The application has ended.";}