Saat menggunakan ASP untuk menulis komunitas virtual, belanja online, dan program lainnya, objek Aplikasi dan Sesi memainkan peran yang menentukan, dan dapat digunakan secara fleksibel dan rasional.
Objek inilah yang menjadi kunci peningkatan kualitas program. Izinkan saya memberi Anda pengenalan mendalam tentang dua objek bawaan ASP ini berdasarkan pengalaman saya di bidang ini.
1. Ikhtisar anggota objek Aplikasi
Anggota objek aplikasi mencakup kumpulan objek aplikasi, metode, dan peristiwa.
⒈Kumpulan objek Aplikasi
Koleksi konten: Kumpulan semua variabel yang disimpan dalam objek Applicaiton yang tidak didefinisikan menggunakan elemen <OBJECT>.
StaticObjects: Kumpulan semua variabel yang disimpan dalam objek Aplikasi yang ditentukan menggunakan elemen <OBJECT>
Contoh: Ada tugas berikut di default.asp
aplikasi(a)=a
aplikasi(b)=128
aplikasi(c)=salah
Lalu ada koleksi isinya
application.contents(1)=a 'dapat juga ditulis sebagai application.contents(a)=a
application.contents(2)=128 'bisa juga ditulis sebagai application.contents(b)=128
application.contents(3)=false 'dapat juga ditulis sebagai application.contents(c)=false
Penulis disini menyarankan Anda menggunakan metode seperti application.contents(a) saat menelepon, karena ini lebih intuitif. Jika diwakili oleh nomor seri,
Pertimbangkan urutan penugasannya.
⒉Metode objek Aplikasi
Contents.Remove(nama variabel): Hapus variabel yang ditentukan dari koleksi Application.Contents
Contents.RemoveAll(): Hapus semua variabel dalam koleksi Application.Contents
Lock(): Mengunci objek Aplikasi sehingga hanya halaman ASP saat ini yang dapat mengakses konten.
Buka Kunci(): Buka kunci objek Aplikasi
Contoh: Di default.asp:
aplikasi(a)=a
aplikasi(b)=128
aplikasi(c)=salah
respon.tulis aplikasi.isi(1)&<br>
respon.tulis aplikasi.isi(2)&<br>
respon.tulis aplikasi.isi(3)&<br>
respon.tulis Setelah Hapus b:
aplikasi.isi.hapus(b)
respon.tulis aplikasi.isi(1)&<br>
respon.tulis aplikasi.isi(2)&<br>
Hasil eksekusi:
A
128
PALSU
Setelah Hapus b:
A
PALSU
Jika Anda ingin menghapus semua variabel dalam koleksi, gunakan saja application.contents.removeall. Sedangkan untuk metode Lock dan Unlock, sering digunakan dalam praktik Baca
Pembaca juga sudah familiar dengannya, jadi tidak akan menjadi beban disini.
⒊Acara objek aplikasi
OnStart: Terjadi ketika pengguna pertama yang mengakses server mengakses halaman untuk pertama kalinya
OnEnd: Terjadi ketika sesi pengguna terakhir telah berakhir dan semua kode untuk acara OnEnd sesi tersebut telah dieksekusi, atau ketika pengguna terakhir mengakses
Server terjadi setelah jangka waktu tertentu (biasanya 20 menit) ketika tidak ada yang mengakses server.
Jika Anda ingin menentukan apa yang harus dilakukan dalam peristiwa OnStart dan OnEnd pada objek aplikasi, Anda perlu menulis kode dalam file Global.asa (contoh di bawah), dan
Dan letakkan file tersebut di direktori root situs (biasanya Inetpubwwwroot)
2. Ikhtisar anggota objek Sesi
Anggota objek Session mempunyai satu atribut lebih dari objek Aplikasi, yaitu: koleksi, properti, metode, dan peristiwa.
⒈Koleksi objek Sesi
Isi: Kumpulan semua variabel yang disimpan dalam objek Sesi tertentu yang tidak didefinisikan menggunakan elemen <OBJECT>.
StaticObject: Kumpulan semua variabel yang didefinisikan menggunakan elemen <OBJECT> dan disimpan dalam objek Session.
Contoh: Ada tugas berikut di default.asp
sesi(a)=a
sesi(b)=128
sesi(c)=salah
Lalu ada koleksi isinya
session.contents(1)=a 'dapat juga ditulis sebagai session.contents(a)=a
session.contents(2)=128 'bisa juga ditulis sebagai session.contents(b)=128
session.contents(3)=false 'dapat juga ditulis sebagai session.contents(c)=false
⒉Properti objek Sesi
Halaman Kode: Dapat Dibaca/Ditulis. Tipe bilangan bulat. Mendefinisikan halaman kode yang digunakan untuk menampilkan konten halaman di browser. Halaman kode adalah kumpulan karakter nilai numerik yang digunakan berbagai bahasa
Halaman kode yang berbeda. Misalnya, halaman kode ANSI adalah 1252, halaman kode Jepang adalah 932, dan halaman kode Cina Sederhana adalah 936.
LCID: Dapat Dibaca/Ditulis. Tipe bilangan bulat. Mendefinisikan pengidentifikasi lokal halaman yang dikirim ke browser. LCID adalah singkatan standar internasional yang secara unik mengidentifikasi suatu wilayah, misalnya.
Tahun 2057 mendefinisikan simbol mata uang wilayah saat ini sebagai £.
ID Sesi: Hanya baca. Tipe panjang. Mengembalikan pengidentifikasi sesi untuk sesi ini. Setiap kali sesi dibuat, pengidentifikasi secara otomatis ditetapkan oleh server. dapat didasarkan padanya
Nilainya menentukan pengguna mana yang mengakses server terlebih dahulu.
Batas Waktu: Dapat Dibaca/Ditulis. Tipe bilangan bulat. Menentukan batas waktu habis dalam hitungan menit untuk sesi tersebut. Jika pengguna tidak menyegarkan atau meminta siapa pun dalam waktu ini
halaman web, sesi yang dihasilkan oleh pengguna akan secara otomatis berakhir. Nilai defaultnya adalah 20.
Atribut di atas tidak banyak berguna dalam aplikasi sebenarnya, dan pada dasarnya tidak perlu dimodifikasi.
⒊Metode objek Sesi
Contents.Remove(nama variabel): Hapus variabel tertentu dari koleksi Session.contents
Contents.Removeall(): Hapus semua variabel dalam koleksi Session.contents
Abaikan(): Mengakhiri sesi pengguna saat ini dan menghancurkan objek Sesi saat ini.
Metode Contents.Remove (nama variabel) dan Contents.Removeall() pada objek Session pada dasarnya sama dengan metode pada objek Application.
Untuk membantu pemahaman, Anda bisa merujuk pada contoh di atas untuk mengubah Aplikasi menjadi Sesi. Yang ingin saya jelaskan disini adalah Contents.Removeall() dan Abandon()
Perbedaannya adalah menjalankan kedua metode ini akan melepaskan arus
Semua variabel Sesi dari sesi pengguna. Perbedaannya adalah Contents.Removeall() hanya melepaskan nilai variabel Sesi tanpa menghentikan sesi saat ini.
Selain melepaskan variabel Session, Abandon() juga akan mengakhiri sesi dan memicu event Session_OnEnd.
⒋Peristiwa objek Sesi
OnStart: Dipicu ketika sesi pengguna ASP dibuat. Peristiwa ini dihasilkan setelah pengguna meminta halaman apa pun dari server ini.
OnEnd: Dipicu ketika sesi pengguna ASP berakhir. Peristiwa ini juga akan dipicu ketika metode atau batas waktu Abandon() digunakan.
Kedua kejadian ini sama dengan kejadian OnStart dan OnEnd pada Aplikasi dan harus ditempatkan di file Global.asa.
Mari fokus mempelajari kegunaan keempat peristiwa ini bersama Anda.
3. Global.asa
Objek Aplikasi dan Sesi ASP mewujudkan fitur yang tidak dimiliki objek bawaan ASP lainnya - peristiwa. Setiap kali pengunjung mengakses server, a
Peristiwa OnStart (pengunjung pertama akan memicu peristiwa OnStart Aplikasi dan Sesi pada saat yang sama, namun Aplikasi mendahului Sesi), setiap pengunjung
Peristiwa OnEnd akan dipicu ketika setiap sesi berakhir (peristiwa OnEnd pada Aplikasi dan Sesi akan dipicu ketika sesi tamu terakhir berakhir, namun
Sesi mendahului Aplikasi).
Dua peristiwa OnStart dan OnEnd umumnya digunakan dalam komunitas virtual untuk menghitung jumlah orang yang online, mengubah status online dan offline pengguna, dll. Untuk mendefinisikan dua hal ini secara spesifik
file, Anda perlu menulis kode di file Global.asa dan menempatkan file di direktori root situs (defaultnya adalah Inetpubwwwroot). Selain itu,
Objek Aplikasi dan Sesi menentukan objek bawaan ASP lainnya (Respon, Permintaan,
Server, Sesi...) tidak dapat digunakan. Berikut ini adalah contoh penghitungan jumlah orang yang online dalam komunitas virtual untuk mengilustrasikan cara menggunakan kedua peristiwa tersebut.
Deskripsi berkas:
global.asa terletak di direktori d:Inetpubwwwroot
default.asp terletak di direktori d:Inetpubwwwroot, halaman login komunitas virtual
login.asp terletak di direktori d:Inetpubwwwroot dan digunakan untuk mendeteksi nama pengguna dan kata sandi yang dimasukkan oleh pengguna.
index.asp terletak di direktori d:Inetpubwwwroot, beranda komunitas virtual
bbs.mdb terletak di direktori d:Inetpubwwwroot dan merupakan database yang menyimpan informasi pengguna.
Struktur basis data (ACCESS):
===tabel bbs===
id ID pengguna, bilangan bulat panjang
nama nama pengguna, jenis teks
kode kata sandi, tipe teks
status online online, ya/tidak
===global.asa===
<skrip BAHASA=VBScript RUNAT=Server>
Sub Aplikasi_OnStart
aplikasi(online)=0
Akhiri Sub
subAplikasi_DiAkhir
dan Sub
SubSesi_DiMulai
Akhiri Sub
SubSesi_Di Akhir
if session.contents(pass) lalu 'Tentukan apakah itu Session_OnEnd dari pengguna yang masuk
aplikasi.lock
aplikasi(online)=aplikasi(online)-1
aplikasi.buka kunci
berakhir jika
Akhiri Sub
</skrip>
==============
===login.asp===
...'Verifikasi kata sandi, sambungkan ke database, dan periksa apakah nama pengguna dan kata sandi yang dimasukkan oleh pengguna sudah benar.
jika verifikasi kata sandi lolos maka
sesi(nama)=rs(nama)
sesi(id)=rs(id)
sesi(lulus)=benar
kalau tidak
rs.tutup
samb.tutup
respon.tulis kata sandi salah!
respon.akhir
berakhir jika
aplikasi.lock
lamaran(online)= lamaran(online)+1
conn.Execute (perbarui bbs set online=1 di mana id=&session(id))'Setel status pengguna menjadi online
aplikasi.buka kunci
rs.tutup
samb.tutup
respon.redirect index.asp 'Setelah menginisialisasi data, lompat ke beranda komunitas
===========
Dalam contoh ini, gunakan variabel aplikasi (online) untuk mencatat jumlah orang daring yang telah masuk ke komunitas, karena sekali pengguna mengakses server, tidak masalah apakah pengguna tersebut
Saat Anda login, event OnStart akan dibuat, jadi Anda tidak dapat menambah Applicaiton (online) satu per satu di event OnStart. Karena terlepas dari apakah itu adalah sesi pengguna yang login
Acara OnEnd akan dibuat ketika berakhir (jika pengunjung mengunjungi server tetapi tidak masuk ke komunitas, acara OnEnd juga akan dibuat setelah sesinya berakhir), jadi di
Pernyataan if digunakan dalam acara Session_OnEnd untuk menentukan apakah itu merupakan acara OnEnd untuk pengguna yang masuk. Jika demikian, jumlah orang yang online akan berkurang satu.
Ini hanyalah contoh sederhana penghitungan jumlah orang yang online. Untuk komunitas virtual yang lengkap, tidak cukup hanya menghitung berapa banyak orang yang online
Terdapat kolom online di database yang digunakan untuk mencatat status online pengguna. Saat pengguna login, online diatur ke 1 di login.asp, tetapi tidak muncul saat pengguna offline.
Online disetel ke 0. Untuk memperbaikinya, Anda perlu mengubah acara Session_OnEnd dan menyetel online ke 0 di acara ini.
===loal. sas===
<skrip BAHASA=VBScript RUNAT=Server>
Sub Aplikasi_OnStart
aplikasi(online)=0
setel aplikasi(sambungan)=Server.CreateObject(ADODB.Connection)
application(db)=Server.MapPath( bs.mdb) 'Yang terbaik adalah menggunakan jalur absolut bs.mdb di sini, seperti yang dijelaskan di bawah
Akhiri Sub
subAplikasi_DiAkhir
setel aplikasi(sambungan)=tidak ada
Akhiri Sub
SubSesi_DiMulai
Akhiri Sub
SubSesi_Di Akhir
if session.contents(pass) lalu 'Tentukan apakah itu Session_OnEnd dari pengguna yang masuk
application(con).open =driver={Microsoft Access Driver (*.mdb)};dbq=&application(db)
aplikasi.lock
aplikasi(online)=aplikasi(online)-1
application(con).Execute (perbarui set teman secara online=0 di mana id=&session.contents(id))
aplikasi.buka kunci
aplikasi(con).close
berakhir jika
Akhiri Sub
</naskah>
==============
Sampai di sini, kode lengkap telah selesai. Karena objek Server tidak dapat digunakan dalam acara OnEnd Aplikasi dan Sesi, database
Alamat fisik koneksi dan database di server (d:inetpubwwwroot bs.mdb) disimpan dalam variabel aplikasi dan
Diproses sebelumnya di acara Application_OnStart. Dengan cara yang sama, session(pass) tidak dapat digunakan sebagai pengganti session.contents di acara Session_OnEnd.
(lulus) (penjelasan detail di bawah).
4. Dua hal yang patut diperhatikan dalam contoh di artikel ini
⒈session.contents di acara OnEnd
Teman-teman yang baru mulai menghubungi global.asa sering merujuk pada acara Session_OnEnd di atas
jika session.contents(pass) maka ditulis sebagai
jika sesi (lulus) maka,
Dalam hal ini, sistem tidak akan memunculkan kesalahan, tetapi konten setelahnya tidak akan pernah dieksekusi. Hal ini karena objek Session dilarang digunakan dalam event OnEnd.
Tapi variabel sesi bisa dipanggil menggunakan kumpulan objek Session. Karena IIS tidak memunculkan pesan kesalahan apa pun, penulis pernah membuang banyak waktu untuk hal ini.
di antara. Saya harap semua orang bisa belajar dari ini!
⒉Saat menggunakan Server.MapPath untuk mendapatkan alamat fisik database di acara Application_OnStart, Anda bisa menggunakan alamat absolut untuk menggambarkan masalah ini
Mari kita lakukan percobaan: ubah event Application_OnStart di atas
application(db)=Server.MapPath( bs.mdb) diubah menjadi:
aplikasi(db)=Server.MapPath(bbs.mdb)
Kemudian buat subdirektori pengujian di direktori d:inetpubwwwroot dan tulis temp.asp di direktori pengujian.
====uji.asp====
<%response.tulis aplikasi(db)%>
================
Kemudian copy temp.asp dan letakkan di direktori root (d:inetpubwwwroot). Buka global.asa dengan notepad, lalu buka dua browser, browser A
Masukkan alamat http://localhost/temp.asp dan tekan Enter. Berikut ini yang akan ditampilkan di browser:
d:inetpubwwwroot bs.mdb
Kemudian, klik menu File di jendela Notepad dan pilih Simpan (untuk mengubah waktu modifikasi global.asa, sehingga menyebabkan IIS memulai ulang semua layanan), lalu klik
Masukkan alamat http://localhost/test/temp.asp pada browser B dan tekan Enter.
d:inetpubwwwrootestbs.mdb
Meskipun file global.asa ditempatkan di direktori root situs, jika alamat relatif digunakan di server.mappath, Application_OnStart dipicu.
Jika halaman yang dikunjungi oleh pengguna acara untuk pertama kalinya bukan milik direktori root, mendapatkan alamat fisik database tidak akan menjadi hasil yang diharapkan. Saya harap semua orang berhati-hati.