Penting untuk memelihara informasi status untuk halaman Web dan kontrolnya. Namun, karena aplikasi web dibangun di atas protokol HTTP, yang merupakan protokol tanpa kewarganegaraan, pemeliharaan informasi status menjadi sangat sulit. Untuk mengatasi masalah ini, teknologi ASP.NET 2.0 menyediakan berbagai solusi, seperti menggunakan Sesi, Cookie, status tampilan, status kontrol, bidang tersembunyi, string kueri, konfigurasi pengguna yang dipersonalisasi (Profil), dll. Untuk menggunakan teknologi ASP.NET 2.0 untuk membuat kontrol server, menjaga informasi status juga sangat penting. Solusi utamanya adalah dengan menggunakan status tampilan dan status kontrol. Artikel ini menjelaskan pengetahuan dasar status tampilan (ViewState) secara mendetail, dan memperkenalkan metode penerapan status tampilan melalui aplikasi umum.
Lihat ikhtisar status
Lihat status adalah teknologi yang sangat penting yang memungkinkan halaman dan kontrol di halaman mempertahankan informasi status selama perjalanan bolak-balik dari server ke klien dan kembali dari klien. Dengan cara ini, efek halaman stateful dan terus menerus dieksekusi dapat dibuat di atas lingkungan stateless seperti Web. Bagian ini terutama memperkenalkan mekanisme operasi, metode aplikasi, tipe data yang disimpan, kinerja dan keamanan, pemblokiran status tampilan (ini adalah fitur baru ASP.NET 2.0), kelebihan dan kekurangan status tampilan.
(1)
Proses berjalan spesifik dari status tampilan mekanisme yang sedang berjalan adalah: setiap kali pengguna meminta halaman .aspx, kerangka .NET pertama-tama membuat serial data status dari kontrol terkait menjadi sebuah string, dan kemudian menjadikannya file bernama __VIEWSTATE Nilai Nilai bidang tersembunyi dikirim ke klien. Jika halaman diminta untuk pertama kali, maka kontrol server juga akan dieksekusi untuk pertama kalinya. Bidang tersembunyi bernama __VIEWSTATE hanya berisi informasi default dari kontrol, yang biasanya kosong atau null. Dalam peristiwa postback berikutnya, status properti kontrol server yang tersedia di postback sebelumnya disimpan di ViewState. Hal ini memungkinkan kontrol server untuk memantau keadaan sebelum kejadian postback yang saat ini ditangani terjadi. Proses ini ditangani oleh kerangka .NET, dan bagi pengguna, menjalankan halaman .aspx akan memiliki efek eksekusi berkelanjutan.
(2) Tipe data tersimpan
Status tampilan dapat menyimpan beberapa tipe data, dan untuk meningkatkan efisiensi pengoperasian, status tampilan itu sendiri juga menyertakan serangkaian metode serialisasi yang dioptimalkan untuk tipe umum. Tipe data yang didukung oleh metode serialisasi status tampilan secara default meliputi: String, Int32, Unit, Color, Array, ArrayList, HashTable dan konverter tipe kustom TypeConverter.
Status tampilan telah dioptimalkan untuk objek Array, ArrayList, dan HashTable yang berisi tipe yang tercantum di atas. Oleh karena itu, saat menggunakan status tampilan dalam kontrol, Anda harus mencoba membatasi penggunaan Anda pada tipe data sederhana di atas, serta tipe yang dioptimalkan. Di sini, kita perlu fokus pada pengonversi tipe khusus TypeConverter, yang menyediakan metode terpadu untuk mengonversi tipe nilai ke tipe lain dan mengakses nilai standar dan sub-properti. Misalnya, Anda bisa menggunakan TypeConverter untuk mengonversi string menjadi nilai numerik, atau nilai numerik menjadi string. Jika tidak ada konverter tipe, kerangka halaman akan menggunakan fungsi serialisasi biner yang disediakan oleh kerangka .NET untuk membuat serialisasi objek.
(3) Kinerja dan Keamanan
Saat menggunakan status tampilan, objek harus diserialisasi terlebih dahulu dan kemudian dideserialisasi melalui postback. Jadi, kita harus mengetahui sesuatu tentang kinerja ViewState. Secara default, ViewState kontrol akan diaktifkan. Jika Anda tidak perlu menggunakan ViewState, sebaiknya nonaktifkan. ViewState tidak lagi diperlukan dalam situasi berikut: (1) Kontrol tidak menentukan peristiwa sisi server (peristiwa kontrol saat ini adalah semua peristiwa sisi klien dan tidak berpartisipasi dalam postback); tidak ada nilai properti dinamis atau terikat data. Cara mematikan status tampilan adalah dengan menyetel nilai EnableViewState kontrol ke "false", yaitu EnableViewState="false".
Secara default, ketika konten yang terkait dengan status tampilan dikompilasi dan dikirim ke klien, pembaca akan melihat konten bidang tersembunyi __VIEWSTATE dalam kode HTML halaman. Ini adalah beberapa string yang tidak berarti dan merupakan hasil dari kerangka .NET yang mengkodekan konten yang relevan melalui pengkodean Base64. Mereka dikirim bolak-balik antara klien dan server dalam teks yang jelas. Dalam beberapa kasus, seperti ketika konten sensitif seperti kata sandi, akun, string koneksi, dll. terlibat, sangat tidak aman untuk menggunakan metode default. Untuk tujuan ini, kerangka .NET menyediakan dua mekanisme keamanan untuk ViewState:
Mekanisme verifikasi:
Anda dapat menginstruksikan kerangka .NET untuk menambahkan kode hash ke data ViewState dengan mengatur atribut EnableViewStateMAC="true" (kode hash adalah A Tipe SHA1 dengan panjang 160 bit, sehingga akan sangat mempengaruhi kinerja eksekusi). Ketika peristiwa postback terjadi, kode hash akan dibuat kembali dan harus cocok dengan kode hash asli. Dengan cara ini, dapat diperiksa secara efektif apakah ViewState dapat diubah selama proses transmisi. Secara default, .NET Framework menggunakan algoritma SHA1 untuk menghasilkan kode hash ViewState. Selain itu, Anda juga dapat memilih algoritma MD5 dengan mengatur <machineKey> pada file machine.config, seperti yang ditunjukkan di bawah ini: <machineKey validation="MD5" />. Performa algoritma MD5 lebih baik dibandingkan algoritma SHA1, namun juga kurang aman.
· Mekanisme enkripsi
menggunakan enkripsi untuk melindungi nilai data aktual di bidang ViewState. Pertama, EnableViewStatMAC="true" harus disetel seperti dijelaskan di atas. Kemudian, atur jenis validasi machineKey ke 3DES, yaitu <machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="3DES" />, yang memerintahkan ASP.NET untuk menggunakan algoritma enkripsi 3DES untuk mengenkripsi nilai ViewState.
(4) Pemblokiran Status Tampilan
Konten di atas memperkenalkan beberapa pengetahuan dasar tentang status tampilan. Namun, beberapa pembaca mungkin bingung: Bagaimana jika data status tampilan menjadi sangat besar dalam beberapa kasus? Hal ini jelas akan menimbulkan dampak yang tidak diinginkan. Untuk tujuan ini, ASP.NET 2.0 menambahkan fitur baru yang disebut "pemblokiran status tampilan". Jika jumlah data dalam status tampilan menjadi terlalu besar, pengelompokan status tampilan secara otomatis memecah data menjadi beberapa bagian dan menempatkan data di beberapa bidang formulir tersembunyi.
Untuk mengaktifkan pengelompokan status tampilan, atur properti MaxPageStateFieldLength ke ukuran maksimum yang diperbolehkan dalam satu bidang status tampilan, dalam byte. Ketika halaman diposkan kembali ke server, halaman tersebut mem-parsing string status tampilan selama fase inisialisasi halaman dan memulihkan informasi properti di halaman. Pengaturan defaultnya adalah -1, yang berarti tidak ada ukuran maksimum dan status tampilan tidak akan dibagi menjadi beberapa bagian.
(5) Keuntungan dan Kerugian
Menggunakan status tampilan memiliki tiga keuntungan sebagai berikut: 1. Mengkonsumsi lebih sedikit sumber daya server (dibandingkan dengan Aplikasi dan Sesi). Karena data status tampilan ditulis ke komputer klien. 2. Mudah perawatannya. Secara default, sistem .NET secara otomatis mengaktifkan pemeliharaan data status kontrol. 3. Fitur keamanan yang ditingkatkan. Nilai dalam status tampilan di-hash, dikompresi, dan dikodekan berdasarkan implementasi Unicode, yang lebih aman daripada menggunakan bidang tersembunyi.
Menggunakan status tampilan memiliki tiga kelemahan berikut: 1. Pertimbangan kinerja. Karena status tampilan disimpan di halaman itu sendiri, jika nilai yang disimpan besar, pengguna mungkin masih melambat saat menampilkan dan mengirim halaman, meskipun status tampilan terpotong. 2. Keterbatasan peralatan. Perangkat seluler mungkin tidak memiliki kapasitas memori yang cukup untuk menyimpan data status tampilan dalam jumlah besar. Oleh karena itu, saat memindahkan kontrol server pada perangkat, metode implementasi yang berbeda digunakan. 3. Potensi risiko keamanan. Status tampilan disimpan dalam satu atau beberapa bidang tersembunyi di halaman. Meskipun status tampilan menyimpan data dalam format hash, status tampilan dapat dirusak. Jika Anda melihat sumber keluaran halaman secara langsung, Anda dapat melihat informasi di bidang tersembunyi, yang menyebabkan potensi masalah keamanan.
Aplikasi yang umum
Dalam proses pengembangan kontrol server menggunakan teknologi ASP.NET 2.0, ada banyak aspek dimana view state dapat digunakan. Kamus ViewState biasanya digunakan untuk mengimplementasikan properti kontrol server. ViewState bertipe System.Web.UI.StateBag - kamus pasangan kunci/nilai di mana nilai properti kontrol server dapat disimpan. Berikut ini contoh tipikal untuk mengilustrasikan metode penerapan ViewState.
Dalam kontrol server kustom LabelInViewState, dua properti Text dan TextInViewState diimplementasikan. Yang pertama dibuat menggunakan variabel privat, dan yang kedua diimplementasikan menggunakan ViewState. Semuanya digunakan untuk mendapatkan atau mengatur konten teks. Kode sumber file implementasi kontrol kustom LabelInViewState.cs adalah sebagai berikut.
menggunakan Sistem;menggunakan System.Collections.Generic; menggunakan System.ComponentModel;menggunakan System.Text; menggunakan Sistem.Web; menggunakan Sistem.Web.UI; menggunakan System.Web.UI.WebControls;namespace WebControlLibrary{ [Properti Default("Teks")] [ToolboxData("<{0}:LabelInViewState runat=server></{0}:LabelInViewState>")] kelas publik LabelInViewState : WebControl { string pribadi _teks; //Menerapkan atribut Teks string publik Teks { mendapatkan { kembali (_teks == null) ? string.Kosong : _teks; } setel { _teks = nilai } } //Gunakan ViewState untuk mengimplementasikan properti TextInViewState public string TextInViewState { mendapatkan { String s = (String)ViewState["TextInViewState"]; return ((s == null) ? String.Empty : s); } set { ViewState["TextInViewState"] = nilai } } // Ganti metode RenderContents protected override void RenderContents(output HtmlTextWriter) { keluaran.Tulis("Teks = "); keluaran.Tulis(Teks); keluaran.Tulis("<br/>"); keluaran.Write("TextInViewState = "); keluaran.Tulis(TextInViewState); } } } |
<%@ Laman Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <%@ Daftar Namespace="WebControlLibrary" Majelis="WebControlLibrary" TagPrefix="sample" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <skrip runat="server"> void Button1_Click(pengirim objek, EventArgs e) { demoLabel.Teks = KotakTeks1.Teks; demoLabel.TextInViewState = TextBox2.Teks; } </skrip> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Gunakan status tampilan ViewState </title> </kepala> <gaya tubuh="ukuran font: kecil;"> <form id="form1" runat="server"> <div> Nama: |
Kode di atas yang ditampilkan pada halaman mencakup dua kotak teks, dua tombol, dan kontrol server khusus LabelInViewState. Seperti yang ditunjukkan pada event handler Button1_Click, ketika tombol "Kirim" diklik, kontrol LabelInViewState akan mengambil teks dalam kotak teks dan menampilkannya. Rendering aplikasi ditunjukkan pada Gambar 1 dan 2.
Gambar 1 Klik tombol kirim | Gambar 2 Klik tombol muat ulang |