ASP Kuliah 3: Objek Aplikasi dan Objek Sesi
Penulis:Eve Cole
Waktu Pembaruan:2009-05-30 19:58:17
Pada kuliah sebelumnya, kita telah mempelajari tentang pengumpulan data Formulir, pengumpulan data QueryString, dan pengumpulan data ServerVariables pada objek Permintaan. Sebelum melanjutkan pembelajaran berikut ini, disarankan agar Anda bersantai terlebih dahulu, karena objek Aplikasi yang akan diperkenalkan selanjutnya relatif abstrak, dan Anda mungkin tidak dapat membedakan sesuatu saat pertama kali memahaminya. Ingat: ketika Anda tidak dapat menemukannya, jangan terlalu memikirkan apa itu objek Aplikasi? Seperti kata pepatah lama, belajarlah menggunakannya terlebih dahulu.
1. Memahami objek Aplikasi. Untuk menyegarkan pikiran Anda, mari kita lihat counter rutin (Anda harus menjalankannya untuk memahaminya):
Pertama edit file wuf16.htm:
<html>
<tubuh>
Contoh pencatatan jumlah klik pada suatu halaman: <a href="wuf17.asp">wuf17.asp</a>
</tubuh>
</html>
Kode wuf17.asp adalah sebagai berikut:
<% @LANGUAGE = VBScript %>
<%'wuf17.asp - Catat jumlah kunjungan ke halaman tertentu (prinsip counter)
Opsi Eksplisit
Redupkan Hitungan Web
CountWeb = Permintaan.ServerVariables("SCRIPT_NAME")
'Ini memastikan bahwa setiap halaman memiliki variabel unik untuk menghindari kebingungan
%>
<HTML><BODI>
<%
Respon.Tulis CountWeb & "<Br><Br>" & vbcrlf
Aplikasi.Lock 'Silakan baca penjelasannya
Application(CountWeb) = Application(CountWeb) + 1 'Akumulator, tambahkan 1 ke jumlah klik
Aplikasi.Buka Kunci
Response.Write "Jumlah total klik pada halaman ini sebelum server WEB dimatikan dan dimulai ulang adalah: " & Aplikasi(CountWeb)
%>
</BODI></HTML>
Saat menjalankan program ini, bagi kebanyakan orang, hanya ada satu mesin, yaitu server Web dan klien. Maka Anda hanya dapat membayangkan situasi seperti ini: dua file beranda Anda ditempatkan di server Web yang jauh, dan membanjirnya pengguna domestik dan asing mengaksesnya melalui browser. Setelah setiap pengguna mengklik, nilai Application(CountWeb) akan bertambah 1, dan selama server yang menyimpan file wuf17.asp tidak ditutup, Application(CountWeb) akan terus terakumulasi. Namun perhatikan jika server dimatikan lalu direstart, Aplikasi (CountWeb) akan mulai menghitung dari 0 lagi (saya bingung, saya bilang kenapa jumlah kunjungan halaman saya selalu satu digit). Untuk menghindari situasi penghitungan seperti ini yang selalu dimulai dari nol, Anda harus menyimpan nilai Aplikasi (CountWeb) sebelum server dimatikan, dan mengeluarkannya saat diperlukan di lain waktu, sehingga dapat diakumulasikan secara berurutan untuk melakukannya, silakan dengarkan Decompose setelah N kali.
Pertanyaan selanjutnya adalah apa yang dimaksud dengan Application.Lock dan UnLock? Kami hanya membuat asumsi bahwa sejumlah besar pengguna mengunjungi halaman tersebut, dan setiap klik pengguna akan menyebabkan Aplikasi (CountWeb) bertambah 1. Coba pikirkan, bukankah ini akan berantakan? Kalau dipikir-pikir, itu pasti Anda (Hanya Anda satu-satunya yang mensponsori beranda), jadi harus ada aturan siapa cepat dia dapat. Ketika pengguna mengunjungi halaman dan perlu mengubah nilai Aplikasi (CountWeb), gunakan metode Kunci untuk menguncinya guna mencegah pengguna lain memodifikasinya. Setelah modifikasi selesai, buka kuncinya.
Pernahkah Anda melihat dari contoh di atas bahwa objek Aplikasi menyediakan informasi bersama (Application(CountWeb)) ke semua pengguna, dan berorientasi ke semua pengguna (setiap akses pengguna akan menyebabkan penghitung bertambah 1). Objek Application juga mempunyai dua event yaitu event Application_OnStart dan event Application_OnEnd (jangan bingung, ini hanya konsep awal dalam bahasa pemrograman berorientasi objek). Sintaks saat menggunakannya adalah sebagai berikut:
<BAHASA SKRIP=VBScript RUNAT=Server>
SubAplikasi_Di Akhir
'Ketika server WEB ditutup, acara Application_OnEnd akan diaktifkan
'Artinya, program akan mengeksekusi kode yang ditempatkan di sini
'Jadi sebelum server dimatikan, kita bisa mengubah nilai Aplikasi (CountWeb) di wuf17.asp di sini
'Simpan, seperti dalam file teks.
Akhiri Sub
Sub Aplikasi_OnStart
'Saat pengguna pertama menelusuri halaman web ASP, acara Application_OnStart akan diaktifkan, namun saat pengguna lain menelusuri di masa mendatang, acara ini tidak akan terjadi.
'Artinya, program akan mengeksekusi kode yang ditempatkan di sini
'Jadi nilai Aplikasi(CountWeb) yang disimpan dalam file teks dapat dibaca di sini.
Akhiri Sub
</SKRIP>
Berikut ini contoh untuk menggambarkan cara menggunakan event. Fungsi program ini adalah menghitung jumlah total klik pada seluruh halaman situs.
Kode file wuf18.asp (file halaman lain di situs serupa dengan file ini):
<% @LANGUAGE = VBScript %>
<% Opsi Eksplisit
'Semua file halaman di situs harus menyertakan kalimat ini <!--#include file="wuf19.asp"-->%>
<!--#termasuk file="wuf19.asp"-->
<HTML><BODI>
Jumlah total klik pada semua halaman situs sebelum server dimatikan dan dimulai ulang: <%= Application("CountAll") %>
</BODI></HTML>
Kode file wuf19.asp:
<% ' wuf19.asp
Aplikasi.Kunci
Aplikasi("HitungSemua") = Aplikasi("HitungSemua") + 1
Aplikasi.Buka Kunci
%>
File wuf18.asp dan wuf19.asp ditempatkan di direktori yang sama. Kode file global.asa:
Catatan: Event handler harus disimpan sebagai file teks bernama "global.asa" dan harus ditempatkan di direktori root jalur virtual (biasanya di direktori yang sama dengan file index.htm atau default.htm, misalnya: Ambil mesin saya sebagai contoh. Dalam hal jalur absolut, global.asa ditempatkan di bawah c:InetPubhome, sedangkan wuf18.asp dan wuf19.asp ditempatkan di bawah c:InetPubhomeasp). path only File global.asa diperbolehkan ada.
<BAHASA SKRIP=VBScript RUNAT=Server>
'global.asa - wuf18.asp Nama file dalam paket download adalah 18global.asa, yang perlu diganti namanya saat menggunakannya.
Sub Aplikasi_OnStart
'Saat pengguna pertama menelusuri halaman web, setel nilai awal penghitung ke 0.
'Saat pengguna lain menjelajah di masa mendatang, kode berikut tidak akan dijalankan lagi.
Aplikasi.Kunci
Aplikasi("HitungSemua") = 0
Aplikasi.Buka Kunci
Akhiri Sub
</SKRIP>
Telusuri wuf18.asp untuk melihat hasil yang berjalan. Tampaknya tidak sulit untuk sekadar belajar menggunakan objek Aplikasi.
2. Memahami objek Sesi. Dengan objek Aplikasi sebelumnya sebagai bayangan, objek Sesi jauh lebih mudah. Mirip dengan objek Aplikasi, hanya saja objek ini hanya digunakan untuk mencatat informasi terkait satu pengguna. Objek ini berorientasi pada satu pengguna, sehingga kita dapat menggunakan objek Sesi untuk menyimpan informasi tentang satu pengguna.
Seperti objek Aplikasi, objek Sesi juga memiliki dua peristiwa: peristiwa Session_OnStart dan peristiwa Session_OnEnd. Sintaks penggunaannya mirip dengan objek Aplikasi.
Perlu disebutkan bahwa sebelum menggunakan objek Sesi, Anda harus mengonfirmasi bahwa fungsi Cookie browser diaktifkan (pengaturan default baik-baik saja).
Berikut contohnya. Persyaratan file global.asa sama seperti di atas, sehingga global.asa pada contoh di atas akan ditimpa oleh global.asa pada contoh ini.
<BAHASA SKRIP=VBScript RUNAT=Server>
' global.asa - wuf20.asp Nama file dalam paket download adalah 20global.asa
SubSesi_DiMulai
Session("In") = Sekarang 'Fungsi Sekarang mendapatkan waktu saat ini
Akhiri Sub
SubSesi_Di Akhir
Sesi("Keluar") = Sekarang
Aplikasi.Kunci
Aplikasi("Keluar") = Sesi("Keluar")
Aplikasi("Masuk") = Sesi("Masuk")
Aplikasi("Keluar").Buka Kunci
Akhiri Sub
</SKRIP>
Berkas wuf20.asp:
<%@ Bahasa=VBScript %>
<HTML>
<TUBUH>
<% 'wuf20.asp
Response.Tulis "Pengaturan Timeout Default:" & Session.Timeout & "Menit<Br>"
Sesi. Batas Waktu = 1
Response.Tulis "Waktu Anda memasuki situs ini:" & Sesi("Masuk") & "<Br>"
Response.Tulis "Harap segarkan halaman ini dalam 1 menit" & "<Br><Br>"
jika Bukan IsEmpty(Application("Out")) lalu
Response.Tulis "Terakhir kali Anda memasuki situs ini:" & Aplikasi("Masuk") & "<Br>"
Response.Tulis "Terakhir kali Anda meninggalkan situs ini:" & Aplikasi("Keluar") & "<Br>"
Respon.Tulis "Waktu browsing (menit):" &_
Tanggaliff("n",Aplikasi("Masuk"),Aplikasi("Keluar")) & "<Br><Br>"
Akhiri Jika
jika IsEmpty(Sesi("Keluar")) lalu
Response.Tulis "Nilai Session(""Out"") sebelum refresh dan setelah refresh kosong" & "<Br>"
Akhiri Jika
%>
</BODI>
</HTML>
Saat pengguna menelusuri halaman web untuk pertama kalinya, peristiwa Session_OnStart terjadi. Program mencatat waktu ketika pengguna memasuki halaman web. Namun, peristiwa Session_OnEnd tidak terjadi pada saat ini, sehingga Aplikasi (“Keluar”). nilainya kosong dan program tidak menampilkan waktu penelusuran.
Kita tahu bahwa masa hidup objek Aplikasi adalah dari pengguna pertama yang menjelajahi halaman web hingga server dimatikan. Masa hidup objek Session adalah sejak pertama kali pengguna menelusuri halaman web (awal sesi) hingga akhir sesi. Jadi kapan sesinya berakhir? Khususnya dalam contoh ini, Session.Timeout = 1 menyetel batas waktu sesi menjadi 1 menit, yaitu jika tidak ada permintaan yang diberikan ke server web selama 1 menit, sesi akan habis, menyebabkan sesi berakhir, peristiwa Session_OnEnd terjadi, dan program mengeksekusi kode di Session_OnEnd. Di sini kita memasukkan waktu masuk dan keluar ke dalam Application("In") dan Application("Out") masing-masing, karena setelah sesi berakhir, objek Session tidak akan ada lagi. Kami memverifikasi ini di akhir kode.
Dari rutinitas ini kita dapat melihat:
1. Objek aplikasi dan objek Sesi memiliki masa hidup yang berbeda.
2. Objek Sesi ditujukan untuk satu pengguna, dan nilainya disimpan di klien. Penjelajahan oleh pengguna lain tidak berdampak pada objek Sesi pengguna tunggal. Seorang pengguna hanya dapat membaca dan menulis nilai objek Session-nya sendiri (misalnya: Session("In")).
3. Perhatikan representasi tanda kutip ganda di Response.Write: (""Out"").
4. Pengingat khusus: Program ini tidak praktis dan hanya untuk debugging (hanya cocok untuk browsing oleh satu pengguna saja). Jawabannya ada di akhir artikel ini.
Tip: Mohon perhatikan karakteristik objek Aplikasi.
3. Contoh klasik: Cara menampilkan jumlah orang secara online di halaman web. menyimpan jumlah total pengunjung.
Prinsip: Saat pengguna baru menjelajahi halaman web, terjadi peristiwa Session_OnStart, jumlah pengguna online bertambah 1, dan jumlah pengguna yang berkunjung juga bertambah 1. Saat pengguna keluar, peristiwa Session_OnEnd terjadi setelah waktu sesi habis, dan jumlah orang yang online berkurang 1.
Kode Global.asa adalah sebagai berikut:
<BAHASA SKRIP=VBScript RUNAT=Server>
'Global.asa-wuf21.asp
Sub Aplikasi_OnStart
Aplikasi.Kunci
'Baca nilai awal Application("CountAll") di sini
Aplikasi.Buka Kunci
Akhiri Sub
SubSesi_DiMulai
Aplikasi.Kunci
Aplikasi("Online") = Aplikasi("Online") + 1
Aplikasi("HitungSemua") = Aplikasi("HitungSemua") + 1
Aplikasi.Buka Kunci
Akhiri Sub
SubSesi_Di Akhir
Aplikasi.Kunci
Aplikasi("Online") = Aplikasi("Online") - 1
Aplikasi.Buka Kunci
Akhiri Sub
SubAplikasi_Di Akhir
Aplikasi.Kunci
'Aplikasi("CountAll") harus disimpan ke file di sini
Aplikasi.Buka Kunci
Akhiri Sub
</SKRIP>
Kode Wuf21.asp adalah sebagai berikut:
<%@ Bahasa=VBScript %>
<HTML>
<TUBUH>
<%Sesi.Waktu Habis = 5%>
<P>Jumlah orang yang online: <%= Aplikasi("Online")%></P>
<P>Jumlah total pengunjung: <%= Application("CountAll")%></P>
</BODI>
</HTML>
Harap dicatat bahwa rutinitas ini dibandingkan dengan wuf17.asp. Yang terakhir menghitung jumlah klik, sedangkan yang pertama menghitung jumlah pengunjung.
Jawaban: Karena objek Aplikasi berlaku untuk semua pengguna, dalam kasus multi-pengguna, penelusuran pengguna lain juga akan mengubah nilai Aplikasi ("Masuk") dan Aplikasi ("Keluar").