이 문제에 대한 나의 해결책은 사용자에게 활성 시간 간격 문제가 있다는 것입니다. 이 활성 시간 간격을 초과하는 경우 오프라인으로 간주될 수 있습니다. 후자는 로그인할 수 있습니다. 후자는 로그인되어 있지 않다고 해서 전자가 다시 로그인해야 한다는 의미는 아닙니다. 그의 세션이 아직 남아 있기 때문입니다. 이 시간은 가능한 한 작고 더 정확하게 설정할 수 있지만 절대적일 수는 없습니다.
코드는 포스터 참조를 위해 게시되었습니다.
함수 CheckOnline()
DIM IP,rsPrv,Sql,PrvDbState
PrvDbState = 거짓
DBSTATE = False인 경우
DB열기()
PrvDbState = 참
종료 조건
rsPrv=Server.CreateObject(ADODB.Recordset) 설정
세션(사용자 이름) = 다음인 경우
Sql=선택 * [온라인]에서 SessionID='& Session.Sessionid &'
rsPrv.Open SQL,Conn,1,3
rsPrv.Eof인 경우
rsPrv.AddNew
rsPrv(세션ID) = 세션.세션ID
rsPrv(GroupChargeLv) = -1
rsPrv(LastActTime) = 지금()
rsPrv(UserIP) = GetIP
rsPrv(OnLineTime) = 0
rsPrv(UserWhere) = 요청.서버변수(HTTP_REFERER)
또 다른
rsPrv(UserWhere) = 요청.서버 변수(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime) = 지금()
종료 조건
rsPrv.업데이트
rsPrv.Close()
'응답.로그인하지 말고 쓰기
또 다른
'response.Write 로그인됨
Sql=선택 * [온라인]에서 UserName='& 세션(사용자 이름) &'
rsPrv.Open SQL,Conn,1,3
rsPrv.Eof인 경우
rsPrv.AddNew
rsPrv(세션ID) = 세션.세션ID
rsPrv(사용자 이름) = 세션(사용자 이름)
rsPrv(GroupChargeLv) = 세션(GroupChargeLv)
rsPrv(LastActTime) = 지금()
rsPrv(OnLineTime) = 0
rsPrv(사용자IP)= GetIP
rsPrv(UserWhere) = 요청.서버변수(HTTP_REFERER)
또 다른
rsPrv(SessionID) <> Session.SessionID 및 Application(LoginSet)(1) = False인 경우
InfoTo LoginOut.asp, 이 계정은 다른 곳에 로그인되어 있습니다. 해당 웹사이트는 ID/n당 1번만 로그인할 수 있습니다. 나중에 로그인을 시도할 수 있습니다.
응답.끝()
종료 조건
rsPrv(UserWhere) = 요청.서버변수(HTTP_REFERER)
rsPrv(OnLineTime) = rsPrv(OnLineTime) + DateDiff(n,rsPrv(LastActTime),Now())
rsPrv(LastActTime)=지금()
종료 조건
rsPrv.업데이트
rsPrv.Close()
종료 조건
rsPrv = 없음 설정
If DateDiff(s,Application(OnLineLastDelete),Now()) > Int(Application(DELETEONLINEDIFF)) Then
응용프로그램.잠금()
애플리케이션(OnLineLastDelete) = 현재
응용 프로그램.잠금 해제()
Conn.Execute(delete from [Online] where datedIf('s',LastActTime,Now())>& Int(Application(CHECKONLINEDIFF) &)) 'x초 동안 활동하지 않은 방문자를 삭제합니다.
종료 조건
PrvDbState = True이면 DbClose()
기능 종료