1. Prinzip In global.asax in .net gibt es Application_AuthenticateRequest-Ereignisse und Application_BeginRequest-Ereignisse, die jedes Mal ausgelöst werden, wenn auf die ASPX-Datei zugegriffen wird. Allerdings kann Application_BeginRequest keine Identitätstickets identifizieren, die einer FROMS-Authentifizierung unterzogen wurden. Es kann also nur in Application_AuthenticateRequest platziert werden.
Mein Implementierungsprinzip lautet: Bei jedem Zugriff auf die ASPX-Datei wird beurteilt, ob dieser Benutzer in der Online-Tabelle vorhanden ist (der Benutzername wurde angemeldet, die IP-Adresse wurde nicht angemeldet) und ob er nicht vorhanden ist , die Identität des Benutzers und schließlich die Zugriffszeit, die IP des letzten Zugriffs und die URL des letzten Zugriffs werden in der Datenbank gespeichert. Wenn es bereits in der Datenbank vorhanden ist, aktualisieren Sie den Datensatz und aktualisieren Sie die letzte Zugriffszeit, die IP und die letzte Zugriffs-URL.
Löschen Sie gleichzeitig Daten in der Datenbank, die mehr als 20 Minuten von der aktuellen Zeit entfernt sind (keine Operation für 20 Minuten wird als Zeitüberschreitung betrachtet).
2. Vorteile: Sie können nicht nur die genaue Anzahl der Personen sehen, die gerade online sind, sondern auch wissen, wer online ist, ob sie angemeldet sind, wie hoch der Anteil der Besucher ist, die Mitglieder sind, und deren Standort, und die Anzahl der Personen auf a berechnen bestimmte Seite.
3. Datenbankstruktur:
Länge des Primärschlüsselfeldtyps, unabhängig davon, ob er leer ist oder nicht
1uson_serialint40 Seriennummer
0uson_uservarchar200 Benutzername (IP, wenn nicht angemeldet)
0uson_companyvarchar1000 Firmenname (wenn nicht angemeldet, lautet es „Besucher“)
0uson_ip varchar200IP-Adresse
0uson_datedatetime80 letzte Operationszeit
0uson_urlvarchar1000 letzter Vorgang Seitenpfad
4. Programmhinweise:
1. Das Programm befindet sich in global.asax
2. Ich verwende die FORMS-Authentifizierung.
3. Bitte verwenden Sie System.Web.Security
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
string strUserID = string.Empty;
string strCompany = string.Empty;
if (Request.IsAuthenticated)
{
FormsIdentity Identity = (FormsIdentity)User.Identity;
FormsAuthenticationTicket Ticket = Identity.Ticket;
strUserID = User.Identity.Name;
strCompany = ticket.UserData.Split("|".ToCharArray())[2];
}
anders
{
strUserID = Request.UserHostAddress;
strCompany = "Besucher";
}
MemberOnlineInfo objOnline = new MemberOnlineInfo(strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany
account = new MemberAccount();
if (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
anders
account.UpdateOnline(objOnline);
//Mitglieder mit Zeitüberschreitung löschen
account.DeleteOnline();
}