Мое решение этой проблемы заключается в том, что у пользователя возникла проблема с активным интервалом времени. Те, которые превышают этот активный временной интервал, могут считаться оффлайн. Последние могут быть авторизованы. Если последний не авторизован, это не означает, что первому необходимо авторизоваться снова. Потому что его сессия все еще там. Это время можно установить только как можно меньшим и более точным, но оно не может быть абсолютным.
Код опубликован для справки автора.
Функция ПроверитьОнлайн()
DIM IP, rsPrv, Sql, PrvDbState
ПрвДбстате = ложь
Если DBSTATE = Ложь Тогда
ДбОткрыть()
ПрвДбстате = Истина
Конец, если
Установите rsPrv=Server.CreateObject(ADODB.Recordset)
Если сеанс (имя пользователя) = тогда
Sql=select * from [Online], где SessionID='& Session.Sessionid &'
rsPrv.Open Sql,Conn,1,3
Если rsPrv.Eof, то
rsPrv.AddNew
rsPrv(SessionID) = Session.SessionID
rsPrv(GroupChargeLv) = -1
rsPrv(LastActTime) = Сейчас()
rsPrv(IP-адрес пользователя) = ПолучитьIP
rsPrv(OnLineTime) = 0
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
Еще
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime) = Сейчас()
Конец, если
rsPrv.Update
rsPrv.Close()
'ответ. Напишите notlogin
Еще
'response.Напишите, что вы вошли в систему
Sql=select * from [Online] где UserName='& Session(UserName) &'
rsPrv.Open sql, Conn, 1,3
Если rsPrv.Eof, то
rsPrv.AddNew
rsPrv(SessionID) = Session.SessionID
rsPrv(Имя пользователя) = Сеанс (Имя пользователя)
rsPrv(GroupChargeLv) = Сеанс (GroupChargeLv)
rsPrv(LastActTime) = Сейчас()
rsPrv(OnLineTime) = 0
rsPrv(UserIP)= ПолучитьIP
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
Еще
Если rsPrv(SessionID) <> Session.SessionID и Application(LoginSet)(1) = False Тогда
InfoTo LoginOut.asp, эта учетная запись была выполнена в другом месте, на веб-сайте может быть только 1 логин для каждого идентификатора/n. Вы можете попытаться войти в систему позже.
Ответ.Конец()
Конец, если
rsPrv(UserWhere) = Request.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime)=Сейчас()
Конец, если
rsPrv.Update
rsPrv.Close()
Конец, если
Установить rsPrv = Ничего
Если DateDiff(s,Application(OnLineLastDelete),Now()) > Int(Application(DELETEONLINEDIFF)) Тогда
Приложение.Блокировка()
Приложение(OnLineLastDelete) = сейчас
Приложение.UnLock()
Conn.ExeCute(delete from [Online] где DateIff('s',LastActTime,Now())>& Int(Application(CHECKONLINEDIFF) &)) 'Удалить посетителей, которые были неактивны в течение x секунд
Конец, если
Если PrvDbState = True, то DbClose()
Конечная функция