Mi solución a este problema es que el usuario tiene un problema de intervalo de tiempo activo. Aquellos que superen este intervalo de tiempo activo se pueden considerar fuera de línea. Este último puede iniciar sesión. Si este último no está conectado, no significa que el primero deba iniciar sesión nuevamente. Porque su sesión sigue ahí. Este tiempo sólo puede establecerse lo más pequeño posible y más preciso, pero no puede ser absoluto.
El código se publica para referencia del cartel.
Función Verificar en línea()
DIM IP,rsPrv,Sql,PrvDbState
PrvDbState = Falso
Si DBSTATE = Falso entonces
DbAbrir()
PrvDbState = Verdadero
Terminar si
Establecer rsPrv=Server.CreateObject(ADODB.Recordset)
Si sesión (nombre de usuario) = entonces
Sql=seleccione * desde [En línea] donde SessionID='& Session.Sessionid &'
rsPrv.Open Sql,Conn,1,3
Si rsPrv.Eof entonces
rsPrv.AñadirNuevo
rsPrv(IDSesión) = Sesión.IDSesión
rsPrv(NivelCargaGrupo) = -1
rsPrv(LastActTime) = Ahora()
rsPrv(IPUsuario) = ObtenerIP
rsPrv(TiempoEnLínea) = 0
rsPrv(UserWhere) = Solicitud.ServerVariables(HTTP_REFERER)
Demás
rsPrv(UserWhere) = Solicitud.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime) = Ahora()
Terminar si
rsPrv.Actualización
rsPrv.Cerrar()
'respuesta.Escribir no iniciar sesión
Demás
'respuesta.Escribir iniciado sesión
Sql=seleccione * desde [En línea] donde Nombre de usuario='& Sesión(Nombre de usuario) &'
rsPrv.Abrir sql,Conn,1,3
Si rsPrv.Eof entonces
rsPrv.AñadirNuevo
rsPrv(IDSesión) = Sesión.IDSesión
rsPrv(Nombre de usuario) = Sesión(Nombre de usuario)
rsPrv(NvCargaGrupo) = Sesión(NvCargaGrupo)
rsPrv(LastActTime) = Ahora()
rsPrv(TiempoEnLínea) = 0
rsPrv(IPUsuario)= ObtenerIP
rsPrv(UserWhere) = Solicitud.ServerVariables(HTTP_REFERER)
Demás
Si rsPrv(SessionID) <> Session.SessionID y Application(LoginSet)(1) = False Entonces
InfoPara LoginOut.asp, esta cuenta ha iniciado sesión en otro lugar, el sitio web solo puede tener 1 inicio de sesión por ID/nPuede intentar iniciar sesión más tarde.
Respuesta.Fin()
Terminar si
rsPrv(UserWhere) = Solicitud.ServerVariables(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime)=Ahora()
Terminar si
rsPrv.Actualización
rsPrv.Cerrar()
Terminar si
Establecer rsPrv = Nada
Si DateDiff(s,Application(OnLineLastDelete),Now()) > Int(Application(DELETEONLINEDIFF)) Entonces
Aplicación.Lock()
Aplicación (OnLineLastDelete) = ahora
Aplicación.Desbloquear()
Conn.ExeCute(eliminar de [en línea] donde dateIff('s',LastActTime,Now())>& Int(Application(CHECKONLINEDIFF) &)) 'Eliminar visitantes que han estado inactivos durante x segundos
Terminar si
Si PrvDbState = Verdadero entonces DbClose()
Función final