Подсчет анонимных и авторизованных пользователей - сайт ASP.NET - PullRequest
0 голосов
/ 15 сентября 2011

Я хотел бы реализовать надежный счетчик пользователей. В настоящее время я использую переменные сессии. Вот посмотрите на мою реализацию:

void Application_Start(object sender, EventArgs e) 
{
    // Code that runs on application startup
    Application["OnlineUsers"] = 0;
    Application["LoggedInUsers"] = 0;
}

void Session_Start(object sender, EventArgs e) 
{
    // Code that runs when a new session is started
    Application.Lock();
    Application["OnlineUsers"] = (int)Application["OnlineUsers"] + 1;
    Application.UnLock();
}

void Session_End(object sender, EventArgs e) 
{
    Application.Lock();
    if ((int)Application["OnlineUsers"] > 0)
    {
        Application["OnlineUsers"] = (int) Application["OnlineUsers"] - 1;
    }
    Application.UnLock();
}

protected void Login1_LoggedIn(object sender, EventArgs e)
{
    Application.Lock();
    Application["LoggedInUsers"] = (int)Application["LoggedInUsers"] + 1;
    Application.UnLock();
}

protected void LoginStatus1_LoggedOut(object sender, EventArgs e)
{
    Application.Lock();
    if ((int)Application["LoggedInUsers"] > 0)
    {
        Application["LoggedInUsers"] = (int) Application["LoggedInUsers"] - 1;
    }
    Application.UnLock();
}

Недостатки этого подхода хорошо известны. Я не мог найти ничего более точного. Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 15 сентября 2011

Учитывая нечеткую природу Session_End, подход, который я использовал, заключается в том, чтобы просто определить «Онлайн-пользователя» как человека, который занимался в течение последних 5 минут. Затем вы можете просто посчитать количество пользователей, которые имеют активность в течение этого периода времени.

...