1. 원리 .net의 global.asax에는 aspx 파일에 접근할 때마다 발생하는 Application_AuthenticateRequest 이벤트와 Application_BeginRequest 이벤트가 있습니다. 그러나 Application_BeginRequest는 FROMS 인증을 거친 ID 티켓을 식별할 수 없습니다. 따라서 Application_AuthenticateRequest에만 배치할 수 있습니다.
내 구현 원칙은 다음과 같습니다. aspx 파일에 액세스할 때마다 온라인 테이블에 이 사용자가 있는지(사용자 이름은 로그인되어 있고 IP 주소는 로그인되어 있지 않음) 존재하지 않는 경우 판단됩니다. , 사용자의 신원, 마지막으로 접속 시간, 마지막 접속 IP, 마지막 접속 URL이 데이터베이스에 저장됩니다. 이미 데이터베이스에 있는 경우 기록을 업데이트하고 마지막 접속 시간, IP, 마지막 접속 URL을 업데이트합니다.
동시에 데이터베이스에서 현재 시간과 20분 이상 차이가 나는 데이터를 삭제합니다. (20분 동안 작업이 없으면 시간 초과로 간주됩니다.)
2. 장점 : 현재 온라인에 있는 정확한 인원수를 볼 수 있을 뿐만 아니라, 누가 온라인에 있는지, 로그인 여부, 회원인 방문자의 비율, 위치 등을 알 수 있고, 현재 접속 중인 인원수를 계산할 수 있습니다. 특정 페이지.
3. 데이터베이스 구조:
비어 있는지 여부에 관계없이 기본 키 필드 유형 길이
1uson_serialint40 일련번호
0uson_uservarchar200 사용자 이름(로그인하지 않은 경우 IP)
0uson_companyvarchar1000 회사명 (로그인하지 않은 경우 '방문자')
0uson_ip varchar200IP 주소
0uson_datedatetime80 마지막 작업 시간
0uson_urlvarchar1000 마지막 작업 페이지 경로
4. 프로그램 참고사항:
1. 프로그램은 global.asax에 있습니다.
2. FORMS 인증을 사용하고 있습니다.
protected void Application_AuthenticateRequest(Object sender, EventArgs e)를
사용하십시오
.
{
문자열 strUserID = 문자열.Empty;
문자열 strCompany = 문자열.Empty;
if (Request.IsAuthenticated)
{
FormsIdentity ID = (FormsIdentity)User.Identity;
FormsAuthenticationTicket 티켓 = 신원.티켓;
strUserID = 사용자.ID.이름;
strCompany = ticket.UserData.Split("|".ToCharArray())[2];
}
또 다른
{
strUserID = 요청.UserHostAddress;
strCompany = "방문자";
}
MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany)
MemberAccount account = new MemberAccount();
if (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
또 다른
account.UpdateOnline(objOnline);
//시간 초과된 멤버 삭제
account.DeleteOnline();
}