计算网站访问者总数的正确方法是什么?

时间:2010-08-14 04:45:08

标签: .net asp.net

我面临一个老问题,这让我非常困惑。所以我需要你的建议,以确保我一直在使用正确的方式。 我的要求是计算我网站上的访问者数量,所以我在Global.asax文件中编码:

void Application_Start(object sender, EventArgs e) 
{
    // Get total visitor from database
    long SiteHitCounter = 0;
    int CurrentUsers = 0;
    SiteHitCounter = MethodToGetTotalVisitorFromDatabase();
    Application["SiteHitCounter"] = SiteHitCounter;
    Application["CurrentUsers"] = CurrentUsers;
}

void Application_End(object sender, EventArgs e) 
{
    //  Update total visitor to database when application shutdown
    MethodToUpdateTotalVisitorToDatabase((long)Application["SiteHitCounter"]);
}

void Session_Start(object sender, EventArgs e) 
{
    // Increase total visitor and online user
    Application["SiteHitCounter"] = (long)Application["SiteHitCounter"] + 1;
    Application["CurrentUsers"] = (int)Application["CurrentUsers"] + 1;
}

void Session_End(object sender, EventArgs e) 
{
    // Decrease online user
    Application["CurrentUsers"] = (int)Application["CurrentUsers"] - 1;
}

然后,我在代码文件后面的另一个C#中使用变量Application [“SiteHitCounter”]和Application [CurrentUsers“]在网页上显示它们。 我面临的问题是,当我将网站发布到共享主机时,网站无法像我的数据库那样显示正确的访客总数。

我需要你的建议。

谢谢, 添

3 个答案:

答案 0 :(得分:2)

您不能保证会话结束事件将被触发。你也应该调用application.lock来确保更新计数器时没有并发问题。此外,同一个人可能会在您的应用程序生命周期中创建多个会话,因此您可能需要添加IP地址检查以进一步提高准确性

答案 1 :(得分:1)

检查链接..

Setting an Application("Counter") in the global.asax

您应该在更新之前锁定变量,因为它现在已共享。

void Session_Start(object sender, EventArgs e) 
{
    // Increase total visitor and online user
    Application.Lock();

    Application["SiteHitCounter"] = (long)Application["SiteHitCounter"] + 1;
    Application["CurrentUsers"] = (int)Application["CurrentUsers"] + 1;

    Application.UnLock();
}

void Session_End(object sender, EventArgs e) 
{
    // Decrease online user
    Application.Lock();

    Application["CurrentUsers"] = (int)Application["CurrentUsers"] - 1;

    Application.UnLock();
}

如果你想公平地对ip进行一些检查,那么没有人可以进行多次会话。

答案 2 :(得分:0)

访问者是请求1页的人。在请求之后无法知道他们是否在您的网站上,就像他们当前正在阅读您的网页一样。

会话从第一个请求的页面开始,并在20分钟后过期,即使用户刚刚在会话的第一秒请求了1页然后离开。

因此,没有真正的方法可以了解您在特定时刻有多少访客。

您可以创建一个包含访问IP地址的列表并注册访问时间。 然后,您可以在20分钟之后使用计时器自行使这些条目到期。它也会使来自同一IP的重复会话无效。