Saat membangun situs web untuk komunikasi online, ada masalah yang membuat saya pusing, yaitu tentang statistik pengguna online secara real-time. Pelanggan memerlukan: menghitung jumlah orang yang online saat ini, jumlah pengunjung, jumlah anggota , dan daftar pengguna online, termasuk pengunjung, anggota, dan manajemen (jika pengunjung, ID pengunjung dibuat secara otomatis, jika anggota, nama anggota ditampilkan). Karena membutuhkan kinerja real-time, pertama-tama saya akan menyampaikan ide menggunakan global.asa untuk menyelesaikannya.
Kunci dari masalahnya adalah bagaimana menentukan bahwa pengguna telah keluar, dan bagaimana menjalankan file atau fungsi ketika pengguna keluar.
Setelah berdiskusi dengan beberapa teman di Internet, akhirnya saya menyelesaikan masalah ini.
Prinsip solusinya adalah: tulis halaman universal. Yang disebut halaman universal berarti setiap halaman dalam aplikasi berisi halaman ini, misalnya: header.asp. Di halaman ini, tulis sepotong kode menggunakan XMLHTTP kode adalah Permintaan dikirim ke server setiap 10 detik atau 20 detik, dengan tujuan memperbarui waktu online pengguna saat ini dan menghapus pengguna yang waktu online melebihi waktu tertentu, sehingga catatan pengguna online dalam database tetap terjaga nyata tertentu -waktu alam.
Cara implementasi utamanya adalah:
membuat database baru, nama fieldnya adalah: id (karakter), nama (karakter), pengguna (nomor) tt (tanggal), admin (kode otoritas, 0-pengguna normal, 1-administrator)
tabel nama :online
header.asp ↓
============= === =
<%
... ...
jika sesi("s_in")<>1 dan sesi("s_name")="" maka 'Jika pengguna adalah Masuk sekali ke
rs.open "pilih * dari online", samb,3,3
rs.tambahkan baru
rs("id")=sesi.sessionID
rs("nama")="Tamu" & session.sessionID
rs("user")=0 '0 berarti pengguna belum login dan merupakan pengunjung.
rs("tt")=sekarang
rs.update
rs.tutup
session("s_in")=1 'Mengatur informasi pengguna telah disimpan dalam database, menunjukkan bahwa itu sedang online
end if
if session("s_name")<>""then 'Jika pengguna telah login melalui kotak login
rs.open "pilih * dari online di mana id='" & session.sessionID & "'",sambung,3,3
rs("nama")=sesi("s_name")
rs("admin")=session("s_admin") 'Perbarui nama pengguna menjadi nama anggota
rs("user")=1 'Menunjukkan bahwa pengguna telah login dan menjadi anggota
rs("tt")=now 'Setel waktu sistem saat ini dengan waktu login pengguna
rs.update
rs.tutup
berakhir jika
... ...
%>
... ...
<head>
... ...
<bahasa skrip=javascript>
Tes fungsi()
{
var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP");
xmlhttp.open("POST","onceonline.asp",false); //Kirim permintaan pembaruan ke Onceonline.asp
xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
xmlhttp.kirim();
}
setInterval("Test();",10); //Kirim permintaan pembaruan setiap 10 detik
</skrip>
... ...
</head>
... ...
================ =============
sekalionline.asp
<%
rs.open "pilih tt dari online di mana id='" & session.sessionID & "'",sambung,3,3
rs("tt")=now() 'Perbarui waktu online pengguna online saat ini
rs.update
rs.close
rs.open "hapus dari online di mana tanggaliff('s',tt,now())>60",conn,3,1 'Hapus pengguna batas waktu
%>
________________________________________________ ==============
Dengan cara ini, sifat real-time dari daftar pengguna dalam database pada dasarnya dijamin. Kesalahan tergantung pada perbedaan antara waktu pembaruan dan waktu penghapusan dan kecepatan pemrosesan server disarankan untuk tidak menghentikan waktu penghapusan. Jika interval waktu antar pengguna terlalu kecil, hal ini dapat menyebabkan kesalahan di antara pengguna online.
Solusi ini telah di-debug pada WIN2000+SQL Server2000. Karena solusi ini memiliki persyaratan sistem yang relatif besar, saya berharap teman-teman lain akan menemukan solusi yang lebih baik dan menyelesaikan masalah ini bersama-sama!
Kotak surat saya: [email protected]
Nama saya "Blok Bangunan", silakan berteman dengan saya!