Solusi saya untuk masalah ini adalah pengguna mengalami masalah interval waktu aktif. Yang melebihi interval waktu aktif ini dapat dianggap offline. Yang terakhir dapat login. Jika yang terakhir tidak login, bukan berarti yang pertama harus login lagi. Karena sesinya masih ada. Waktu ini hanya dapat diatur sekecil mungkin dan seakurat mungkin, namun tidak dapat bersifat mutlak.
Kode diposting untuk referensi poster.
Fungsi Periksa Online()
DIM IP,rsPrv,Sql,PrvDbState
PrvDbState = Salah
Jika DBSTATE = Salah Maka
DbTerbuka()
PrvDbState = Benar
Akhiri Jika
Setel rsPrv=Server.CreateObject(ADODB.Recordset)
Jika Sesi(Nama Pengguna) = maka
Sql=pilih * dari [Online] di mana SessionID='& Session.Sessionid &'
rsPrv.Buka Sql, Sambungan,1,3
Jika rsPrv.Eof maka
rsPrv.TambahkanBaru
rsPrv(SessionID) = Sesi.SessionID
rsPrv(GroupChargeLv) = -1
rsPrv(LastActTime) = Sekarang()
rsPrv(UserIP) = DapatkanIP
rsPrv(OnLineTime) = 0
rsPrv(UserWhere) = Permintaan.ServerVariables(HTTP_REFERER)
Kalau tidak
rsPrv(UserWhere) = Permintaan.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Sekarang())
rsPrv(LastActTime) = Sekarang()
Akhiri Jika
rsPrv.Perbarui
rsPrv.Tutup()
'respon. Tulis notlogin
Kalau tidak
'respons.Tulis login
Sql=pilih * dari [Online] di mana NamaPengguna='& Sesi(NamaPengguna) &'
rsPrv.Buka sql, Sambungan,1,3
Jika rsPrv.Eof maka
rsPrv.TambahkanBaru
rsPrv(SessionID) = Sesi.SessionID
rsPrv(Nama Pengguna) = Sesi(Nama Pengguna)
rsPrv(GroupChargeLv) = Sesi(GroupChargeLv)
rsPrv(LastActTime) = Sekarang()
rsPrv(OnLineTime) = 0
rsPrv(UserIP)= DapatkanIP
rsPrv(UserWhere) = Permintaan.ServerVariables(HTTP_REFERER)
Kalau tidak
Jika rsPrv(SessionID) <> Session.SessionID Dan Aplikasi(LoginSet)(1) = Salah Maka
InfoTo LoginOut.asp, akun ini telah login di tempat lain, website hanya dapat memiliki 1 login per ID/nAnda dapat mencoba login nanti.
Respon.Akhir()
Akhiri Jika
rsPrv(UserWhere) = Permintaan.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Sekarang())
rsPrv(LastActTime)=Sekarang()
Akhiri Jika
rsPrv.Perbarui
rsPrv.Tutup()
Akhiri Jika
Setel rsPrv = Tidak Ada
Jika DateDiff(s,Application(OnLineLastDelete),Now()) > Int(Application(DELETEONLINEDIFF)) Lalu
Aplikasi.Kunci()
Aplikasi(OnLineLastDelete) = sekarang
Aplikasi.Buka Kunci()
Conn.ExeCute(hapus dari [Online] di mana tanggalIff('s',LastActTime,Now())>& Int(Application(CHECKONLINEDIFF) &)) 'Hapus pengunjung yang tidak aktif selama x detik
Akhiri Jika
Jika PrvDbState = Benar Maka DbClose()
Fungsi Akhir