Memahami status sesi asp.net
Penulis:Eve Cole
Waktu Pembaruan:2009-07-01 16:44:49
1. Fungsi status sesi
HTTP adalah protokol tanpa kewarganegaraan, sehingga tidak secara otomatis menunjukkan apakah seluruh rangkaian permintaan berasal dari klien yang sama, atau bahkan apakah satu browser masih aktif melihat halaman atau situs. Dan dengan menggunakan fungsi status sesi bawaan ASP.net, kita dapat menggunakan
1. Secara otomatis mengidentifikasi dan mengklasifikasikan permintaan dari klien browser tunggal ke sesi aplikasi logis di server.
2. Menyimpan data cakupan sesi di server untuk digunakan di beberapa permintaan browser.
3. Naikkan peristiwa manajemen seumur hidup sesi yang sesuai (Session_OnStart, Session_OnEnd, dll.) yang dapat ditangani dalam kode aplikasi
2. Identifikasi status sesi
Saat membuat sesi, server menghasilkan ID terpisah untuk setiap sesi. Pengidentifikasi diwakili oleh string SessionID 120-bit yang hanya berisi karakter ASCII yang diizinkan di URL. Nilai SessionID dihasilkan menggunakan algoritma yang menjamin keunikan dan keacakan. Tujuan dari menjamin keunikan adalah untuk memastikan bahwa sesi tidak bertentangan, dan tujuan dari menjamin keacakan adalah untuk memastikan bahwa pengguna jahat tidak dapat menggunakan SessionID baru untuk menghitung jumlah yang ada. sesi.SesiID.
3. Cara menyimpan status sesi
Ada tiga cara untuk menyimpan status sesi:
1. Mode status sesi dalam proses (Inproc): Saat kita membuat program Web baru, mode status sesi dalam proses diadopsi secara default. Ini juga merupakan mode yang umum digunakan oleh semua orang. Dalam mode ini, status sesi disimpan secara lokal dalam proses pekerja ASP.NET, sehingga sejauh ini mode status sesi dalam proses mungkin merupakan opsi akses tercepat. Namun semakin banyak data yang disimpan dalam satu sesi, semakin banyak memori yang dikonsumsi server web, sehingga berpotensi meningkatkan risiko penurunan kinerja.
2. Mode server negara .NET (StateServer): Status sesi disimpan dalam proses jarak jauh (misalnya, dalam layanan windows NT bernama aspnet_state.exe)
3. Mode SQL (SQLServer): Status sesi disimpan dalam tabel database khusus yang dikelola oleh SQL Server.
Mode server negara .NET dan mode SQL dapat disebut mode sesi di luar proses. Saat menyimpan data, data perlu diserialisasi dan disimpan dalam repositori eksternal. Saat membaca dan data, data perlu dideserialisasi dan disalin ke kamus sesi lokal, sehingga permintaan tersebut mengakibatkan penurunan kinerja sebesar 15% (di luar proses) menjadi 25% (SQL Server). Perlu diingat bahwa ini hanyalah perkiraan kasar. Namun dalam skenario penyimpanan di luar proses, status sesi bertahan lebih lama, membuat aplikasi lebih kuat karena melindungi terhadap kegagalan Microsoft® Internet Information Services (IIS) dan ASP.NET. Dengan memisahkan status sesi dari aplikasi, Anda juga dapat dengan lebih mudah memperluas aplikasi yang ada ke dalam arsitektur Web Farm dan Web Garden. Selain itu, status sesi disimpan dalam proses eksternal, yang pada dasarnya menghilangkan risiko kehilangan data berkala karena perulangan proses.
4. Konfigurasi status sesi
Konfigurasi status sesi dicapai dengan mengatur bagian <sessionState> pada file Web.config. Berikut ini memperkenalkan metode konfigurasi spesifik dari tiga status sesi.
1. Mode dalam proses
Mode dalam proses adalah mode status sesi default. Untuk menggunakan mode dalam proses, atur atribut mode elemen <sessionState> ke Inproc.
Contoh pengaturan konfigurasi untuk mode dalam proses ditunjukkan di bawah. http://www.downcodes.com
<konfigurasi>
<sistem.web>
<sessionState mode="Pemrosesan"
tanpa cookie="salah"
batas waktu="20"/>
</sessionState>
</system.web>
</konfigurasi>
2. Modus server negara
Untuk menggunakan server negara, Anda harus terlebih dahulu memastikan bahwa layanan negara ASP.NET berjalan di server jauh yang digunakan untuk penyimpanan sesi. Layanan ini diinstal dengan ASP.NET dan Visual Studio .NET di:
systemrootMicrosoft.NETFrameworkversionNumberaspnet_state.exe
Kemudian, dalam file Web.config aplikasi, atur atribut mode elemen <sessionState> ke StateServer. Terakhir, setel properti connectionString ke tcpip=serverName:portNumber.
Berikut ini adalah contoh pengaturan konfigurasi untuk mode server negara.
<konfigurasi>
<sistem.web>
<sessionState mode="Server Negara"
stateConnectionString="tcpip=server data:42424"
tanpa cookie="salah"
batas waktu="20"/>
</sessionState>
</system.web>
3. Modus SQL Server
Untuk menggunakan SQL Server, pertama-tama jalankan InstallSqlState.sql atau InstallPersistSqlState.sql di komputer SQL Server tempat status sesi akan disimpan. Kedua skrip membuat database bernama ASPState, yang berisi beberapa prosedur tersimpan.
Perbedaan antara kedua skrip tersebut adalah di mana tabel ASPStateTempApplications dan ASPStateTempSessions ditempatkan. Skrip InstallSqlState.sql menambahkan tabel ini ke database TempDB, yang akan kehilangan data saat komputer dihidupkan ulang. Sebaliknya, skrip InstallPersistSqlState.sql menambahkan tabel ini ke database ASPState, yang memungkinkan data sesi disimpan saat komputer dihidupkan ulang.
Secara default, kedua file skrip diinstal di lokasi berikut:
systemrootMicrosoft.NETFrameworkversionNumber
Kemudian, dalam file Web.config aplikasi, atur atribut mode elemen <sessionState> ke SQLServer. Terakhir, atur properti sqlConnectionString ke Keamanan Terintegrasi=SSPI;sumber data=namaserver;.
Contoh pengaturan konfigurasi untuk mode SQL Server ditunjukkan di bawah ini.
<konfigurasi>
<sistem.web>
<mode SessionState="SQLServer"
sqlConnectionString="Keamanan Terintegrasi=SSPI;sumber data=server data;"
tanpa cookie="salah"
batas waktu="20"/>
</sessionState>
</system.web>
</konfigurasi>
Dalam mode SQL Server, status sesi juga dapat dikonfigurasi untuk bekerja di kluster failover. Cluster failover adalah dua atau lebih server Web redundan identik yang menyimpan data sesi dalam database SQL Server di komputer terpisah. Jika satu server Web gagal, server lain di cluster mengambil alih pekerjaannya dan melayani permintaan tanpa kehilangan data sesi.
Untuk mengonfigurasi pengelompokan failover, atur elemen <machinekey> di file Web.config server Web ke nilai yang sama.
Kemudian atur string koneksi SQL server Web agar mengarah ke database SQL Server di komputer Anda tempat data sesi disimpan.
5. Akses ke status sesi
Anda dapat mengakses status sesi secara langsung melalui koleksi Sesi. Untuk kompatibilitas dengan versi ASP sebelumnya, akses ke status sesi juga dapat dicapai melalui properti Session.Contents pada objek aplikasi.
Contoh berikut memperlihatkan penulisan dua nilai pada kumpulan Sesi di halaman web pertama, lalu membaca kumpulan Sesi di halaman web kedua. Catatan: Kode halaman dihilangkan di sini.
Halaman web pertama, menulis nilai ke koleksi Sesi
nama redup sebagai string = "a"
redupkan id sebagai integer = "1"
sesi("nama") = nama
sesi("id") = id
Halaman web kedua mendapatkan nilai dari koleksi Sesi
redupkan nama sebagai string = sesi("nama")
redupkan id sebagai integer = sesi("id")
'Dapatkan jumlah item dalam koleksi status sesi
redupkan saya sebagai bilangan bulat = sesi.hitungan
Perhatikan bahwa dalam mode dalam proses, tidak ada serialisasi dan deserialisasi nyata yang terjadi, sehingga objek disimpan dalam status sesi sebagai instance aktif dari kelasnya masing-masing.
Dalam mode sesi di luar proses, karena serialisasi dan deserialisasi digunakan, Anda harus mengonversi tipe data sesuai dengan situasinya.
Jika Anda membuat serialisasi nilai tanggal, tanggalnya harus bertipe Int64.
6. Sesi acara manajemen seumur hidup
Ada dua acara manajemen seumur hidup sesi, acara Session_OnStart dan acara Session_OnEnd. Anda dapat mengaturnya di file Global.asax.VB.
1. Acara Session_OnStart
Ketika klien browser tunggal terhubung ke server, peristiwa Session_OnStart dipicu, yang menandai awal sesi. Peristiwa ini tidak akan lagi dipicu selama penelusuran berikutnya kecuali sesi tersebut habis waktu atau ditinggalkan. Acara Session_OnStart adalah waktu terbaik untuk menyetel variabel sesi karena variabel tersebut disetel sebelum halaman mana pun diakses.
Contoh: Contoh berikut adalah kode kejadian Session_OnStart yang umum digunakan untuk menghitung jumlah orang yang online:
Sub Session_Start(Pengirim ByVal Sebagai Objek, ByVal dan Sebagai EventArgs)
'Ketika suatu peristiwa terjadi, tambahkan 1 ke jumlah pengguna online
Aplikasi("jumlah pengguna") = Aplikasi("jumlah pengguna") + 1
Akhiri Sub
2. Acara Session_OnEnd
Acara Session_OnEnd terjadi ketika sesi ditinggalkan atau waktu habis, dan ini menandai akhir acara. Namun perlu diketahui bahwa event ini hanya didukung dalam mode InProc. Anda dapat menentukan periode waktu habis melalui atribut timeout di bagian <sessionState> pada file Web.config. Jika pengguna berada dalam periode waktu habis (dalam menit, defaultnya adalah 20 menit
jam) tanpa menyegarkan atau meminta halaman web, sesi akan dihentikan. Anda dapat menggunakan acara Session_OnEnd untuk melakukan beberapa pekerjaan pembersihan.
Contoh: Contoh berikut adalah kode kejadian Session_OnEnd yang umum digunakan untuk menghitung jumlah orang yang online:
Sub Session_End(Pengirim ByVal Sebagai Objek, ByVal dan Sebagai EventArgs)
Aplikasi("jumlah pengguna") = Aplikasi("jumlah pengguna") - 1
Akhiri Sub