1. Principio En global.asax en .net, hay eventos Application_AuthenticateRequest y eventos Application_BeginRequest que se activan cada vez que se accede al archivo aspx. Sin embargo, Application_BeginRequest no puede identificar tickets de identidad que se hayan sometido a autenticación FROMS. Por lo tanto, solo se puede colocar en Application_AuthenticateRequest.
Mi principio de implementación es: cada vez que se accede al archivo aspx, se juzgará si existe este usuario en la tabla en línea (el nombre de usuario ha iniciado sesión, la dirección IP no ha iniciado sesión), si no existe , la identidad del usuario y, finalmente, la hora de acceso, la última IP a la que se accedió y la última URL a la que se accedió se almacenan en la base de datos. Si ya está en la base de datos, actualice el registro y actualice la hora del último acceso, IP y URL del último acceso.
Al mismo tiempo, elimine los datos en la base de datos que estén separados por más de 20 minutos de la hora actual (ninguna operación durante 20 minutos se considera un tiempo de espera).
2. Ventajas: no solo puede ver la cantidad exacta de personas actualmente en línea, sino también saber quién está en línea, si han iniciado sesión, la proporción de visitantes que son miembros y su ubicación, y calcular la cantidad de personas en un determinada página.
3. Estructura de la base de datos:
Longitud del tipo de campo de clave principal, ya sea que esté vacío o no
1uson_serialint40 número de serie
0uson_uservarchar200 nombre de usuario (IP si no ha iniciado sesión)
0uson_companyvarchar1000 nombre de la empresa (si no ha iniciado sesión, es 'visitante')
0uson_ip varchar200Dirección IP
0uson_datedatetime80 hora de la última operación
0uson_urlvarchar1000 ruta de la página de la última operación
4. Notas del programa:
1. El programa está ubicado en global.asax.
2. Estoy usando autenticación FORMS.
3. Utilice System.Web.Security
protected void Application_AuthenticateRequest (remitente del objeto, EventArgs e)
{
cadena strUserID = cadena.Vacío;
cadena strCompany = cadena.Empty;
si (Solicitud.Está autenticada)
{
FormsIdentity identidad = (FormsIdentity)Usuario.Identidad;
FormsAuthenticationTicket ticket = identidad.Ticket;
strUserID = Usuario.Identidad.Nombre;
strCompany = ticket.UserData.Split("|".ToCharArray())[2];
}
demás
{
strUserID = Solicitud.UserHostAddress;
strEmpresa = "Visitante";
}
MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany
cuenta = new MemberAccount()
);
si (!cuenta.CheckUserOnline(strUserID))
cuenta.AddOnline(objOnline);
demás
account.UpdateOnline(objOnline);
//Eliminar miembros agotados
cuenta.DeleteOnline();
}