1. Принцип В файле global.asax в .net есть события Application_AuthenticateRequest и события Application_BeginRequest, которые запускаются каждый раз при доступе к файлу aspx. Однако Application_BeginRequest не может идентифицировать идентификационные билеты, прошедшие аутентификацию FROMS. Поэтому его можно поместить только в 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.
3. Используйте System.Web.Security
protected void Application_AuthenticateRequest (отправитель объекта, EventArgs e)
{
строка strUserID = string.Empty;
строка strCompany = string.Empty;
если (Request.IsAuthenticated)
{
FormsIdentity идентификация = (FormsIdentity)User.Identity;
Билет FormsAuthenticationTicket =identity.Ticket;
стрUserID = Пользователь.Идентификация.Имя;
strCompany = Ticket.UserData.Split("|".ToCharArray())[2];
}
еще
{
стрUserID = Request.UserHostAddress;
strCompany = "Посетитель";
}
MemberOnlineInfo objOnline = новый MemberOnlineInfo (strUserID, Request.UserHostAddress, DateTime.Now.ToString(), Request.FilePath, strCompany
account = new MemberAccount();
если (!account.CheckUserOnline(strUserID))
account.AddOnline(objOnline);
еще
account.UpdateOnline(objOnline);
//Удалить участников с истекшим сроком действия;
аккаунт.DeleteOnline();
}