Meine Lösung für dieses Problem besteht darin, dass der Benutzer ein Problem mit dem aktiven Zeitintervall hat. Diejenigen, die dieses aktive Zeitintervall überschreiten, können als offline betrachtet werden. Wenn letzterer nicht angemeldet ist, bedeutet dies nicht, dass ersterer sich erneut anmelden muss. Weil seine Sitzung immer noch da ist. Diese Zeit kann nur so klein wie möglich und genauer eingestellt werden, sie kann jedoch nicht absolut sein.
Der Code wird als Referenz für den Poster veröffentlicht.
Funktion CheckOnline()
DIM IP,rsPrv,Sql,PrvDbState
PrvDbState = False
Wenn DBSTATE = False, dann
DbOpen()
PrvDbState = True
Ende wenn
Setze rsPrv=Server.CreateObject(ADODB.Recordset)
Wenn Session(UserName) = dann
Sql=select * from [Online] where SessionID='& Session.Sessionid &'
rsPrv.Open Sql,Conn,1,3
Wenn rsPrv.Eof dann
rsPrv.AddNew
rsPrv(SessionID) = Session.SessionID
rsPrv(GroupChargeLv) = -1
rsPrv(LastActTime) = Now()
rsPrv(UserIP) = GetIP
rsPrv(OnLineTime) = 0
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
Anders
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime) = Now()
Ende wenn
rsPrv.Update
rsPrv.Close()
'response.Write notlogin
Anders
'response.Write angemeldet
Sql=select * from [Online] where UserName='& Session(UserName) &'
rsPrv.Open sql,Conn,1,3
Wenn rsPrv.Eof dann
rsPrv.AddNew
rsPrv(SessionID) = Session.SessionID
rsPrv(Benutzername) = Sitzung(Benutzername)
rsPrv(GroupChargeLv) = Session(GroupChargeLv)
rsPrv(LastActTime) = Now()
rsPrv(OnLineTime) = 0
rsPrv(UserIP)=GetIP
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
Anders
Wenn rsPrv(SessionID) <> Session.SessionID und Application(LoginSet)(1) = False, dann
InfoZu LoginOut.asp, dieses Konto wurde an anderer Stelle angemeldet, die Website kann nur 1 Login pro ID/n habenSie können versuchen, sich später anzumelden.
Response.End()
Ende wenn
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime)=Now()
Ende wenn
rsPrv.Update
rsPrv.Close()
Ende wenn
Setze rsPrv = Nichts
Wenn DateDiff(s,Application(OnLineLastDelete),Now()) > Int(Application(DELETEONLINEDIFF)) Dann
Application.Lock()
Application(OnLineLastDelete) = jetzt
Application.UnLock()
Conn.ExeCute(delete from [Online] wherescribedIff('s',LastActTime,Now())>& Int(Application(CHECKONLINEDIFF) &)) 'Besucher löschen, die x Sekunden lang inaktiv waren
Ende wenn
Wenn PrvDbState = True, dann DbClose()
Funktion beenden