1. Prinsip Di global.asax di .net, ada peristiwa Application_AuthenticateRequest dan peristiwa Application_BeginRequest yang dipicu setiap kali file aspx diakses. Namun, Application_BeginRequest tidak dapat mengidentifikasi tiket identitas yang telah menjalani otentikasi FROMS. Jadi hanya bisa ditempatkan di Application_AuthenticateRequest.
Prinsip implementasi saya adalah: setiap file aspx diakses akan dinilai apakah ada pengguna ini di tabel online (nama pengguna sudah login, alamat IP belum login), jika tidak ada , identitas pengguna, dan terakhir Waktu akses, IP terakhir diakses, dan URL terakhir diakses disimpan dalam database. Jika sudah ada di database, perbarui catatan dan perbarui waktu akses terakhir, IP dan URL akses terakhir.
Pada saat yang sama, hapus data dalam database yang jaraknya lebih dari 20 menit dari waktu saat ini (tidak ada operasi selama 20 menit yang dianggap batas waktu).
2. Keuntungan: Anda tidak hanya dapat melihat secara akurat jumlah orang yang sedang online, tetapi juga mengetahui siapa yang sedang online, apakah mereka login, proporsi pengunjung yang menjadi anggota, dan lokasi mereka, serta menghitung jumlah orang di suatu halaman tertentu.
3. Struktur basis data:
Panjang jenis bidang kunci utama apakah kosong atau tidak
1uson_serialint40 nomor seri
0uson_uservarchar200 nama pengguna (IP jika belum login)
0uson_companyvarchar1000 nama perusahaan (jika belum login, itu adalah 'pengunjung')
0uson_ip varchar200alamat IP
0uson_datedatetime80 waktu operasi terakhir
0uson_urlvarchar1000 jalur halaman operasi terakhir
4. Catatan program:
1. Program ini berlokasi di global.asax
2. Saya menggunakan otentikasi FORMULIR.
3. Silakan gunakan System.Web.Security
yang dilindungi void Application_AuthenticateRequest(Pengirim objek, EventArgs e)
{
string strUserID = string.Kosong;
string strPerusahaan = string.Kosong;
if (Permintaan. Diautentikasi)
{
Identitas FormsIdentity = (FormsIdentity)Pengguna.Identitas;
Tiket FormsAuthenticationTicket = identitas.Tiket;
strUserID = Pengguna.Identitas.Nama;
strPerusahaan = tiket.UserData.Split("|".ToCharArray())[2];
}
kalau tidak
{
strUserID = Permintaan.UserHostAddress;
strPerusahaan = "Pengunjung";
}
MemberOnlineInfo objOnline = MemberOnlineInfo baru(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany
akun MemberAccount = new MemberAccount();
if (!akun.CheckUserOnline(strUserID))
akun.AddOnline(objOnline);
kalau tidak
account.UpdateOnline(objOnline);
//Hapus anggota yang waktunya habis
akun.DeleteOnline();
}