1. Princípio Em global.asax em .net, existem eventos Application_AuthenticateRequest e eventos Application_BeginRequest que são acionados sempre que o arquivo aspx é acessado. No entanto, Application_BeginRequest não consegue identificar tickets de identidade que passaram pela autenticação FROMS. Portanto, só pode ser colocado em Application_AuthenticateRequest.
Meu princípio de implementação é: toda vez que o arquivo aspx for acessado, será julgado se existe esse usuário na tabela online (o nome do usuário foi logado, o endereço IP não foi logado), se não existir , a identidade do usuário e, finalmente, o tempo de acesso, o último IP acessado e o último URL acessado são armazenados no banco de dados. Caso já esteja no banco de dados, atualize o registro e atualize o horário do último acesso, IP e URL do último acesso.
Ao mesmo tempo, exclua os dados do banco de dados que estejam separados por mais de 20 minutos do horário atual (nenhuma operação por 20 minutos é considerada um tempo limite).
2. Vantagens: Você pode não apenas ver o número exato de pessoas online no momento, mas também saber quem está online, se estão logados, a proporção de visitantes que são membros e sua localização, e calcular o número de pessoas em um determinada página.
3. Estrutura do banco de dados:
Comprimento do tipo de campo de chave primária, esteja vazio ou não
Número de série 1uson_serialint40
0uson_uservarchar200 nome de usuário (IP se não estiver logado)
0uson_companyvarchar1000 nome da empresa (se não estiver logado, é 'visitante')
0uson_ip endereço varchar200IP
0uson_datedatetime80 horário da última operação
0uson_urlvarchar1000 caminho da página da última operação
4. Notas do programa:
1. O programa está localizado em global.asax
2. Estou usando autenticação FORMS.
3. Use System.Web.Security
protegido void Application_AuthenticateRequest (objeto remetente, EventArgs e)
{
string strUserID = string.Empty;
string strEmpresa = string.Empty;
if (Request.IsAuthenticated)
{
Identidade FormsIdentity = (FormsIdentity)User.Identity;
FormsAuthenticationTicket ticket = identidade.Ticket;
strUserID = Usuário.Identidade.Nome;
strCompany = ticket.UserData.Split("|".ToCharArray())[2];
}
outro
{
strUserID = Request.UserHostAddress;
strEmpresa = "Visitante";
}
MemberOnlineInfo objOnline = novo MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany
conta = new MemberAccount());
if (!account.CheckUserOnline(strUserID))
conta.AddOnline(objOnline);
outro
account.UpdateOnline(objOnline);
//Excluir membros com tempo limite esgotado
conta.DeleteOnline();
}