使用ASP.Net和C#计算WebSite中的访问者数量

时间:2009-10-02 09:20:29

标签: asp.net

我想跟踪我网站的访问者数量。

我在Global.asax类中尝试了以下代码,

<script runat="server">

  public static int count = 0;
  void Application_Start(object sender, EventArgs e) 
  {
    Application["myCount"] = count;
  }

  void Session_Start(object sender, EventArgs e) 
  {
    count = Convert.ToInt32(Application["myCount"]);
    Application["myCount"] = count + 1;
  }

</script>

我正在检索aspx页面中的值,如下所示:

protected void Page_Load(object sender, EventArgs e)
{
  int a;
  a = Convert.ToInt32((Application["myCount"]));
  Label4.Text = Convert.ToString(a);
  if (a < 10)
    Label4.Text = "000" + Label4.Text ;
  else if(a<100)
    Label4.Text = "00" + Label4.Text;
  else if(a<1000)
    Label4.Text = "0" + Label4.Text;
}

以上编码工作正常。它正确生成访问者,但问题是当我重新启动系统时,count变量再次从0开始,这在逻辑上是错误的。

我希望count的值从最后一个计数值增加1。

那么有人能告诉我如何完成这项任务吗?

请帮帮我! 提前谢谢!

4 个答案:

答案 0 :(得分:7)

如果您希望计数在应用程序重新启动时继续递增,则需要将值存储在某个位置 - 在数据库或某个文件中,并在应用程序启动时加载该值。

此外,您可以使用以下内容确保显示的计数始终至少为4个字符:

int a;
a = Convert.ToInt32(Application["myCount"]);
Label4.Text = a.ToString("0000");

有关详细信息,请参阅Custom Numeric Format Strings


编辑以回复评论

就个人而言,我建议使用数据库而不是写入文件系统,至少有以下原因:

  1. 根据您的主机,设置数据库可能比启用对文件系统的写访问要容易得多。
  2. 使用数据库可以将其存储为int而不是string
  3. 在交通拥挤的情况下,您会遇到多个线程试图打开文本文件进行写访问的问题 - 这将导致文件锁定,并导致您不需要的瓶颈。
  4. 各种资源会告诉您如何从代码连接到数据库,这是一个好的起点How To: Connect to SQL Server,并查看“What are the alternatives”下的方法,了解有关如何使用的详细信息查询并更新数据库。

答案 1 :(得分:6)

C#代码如下所示:

    protected void Page_Load(object sender, EventArgs e)
    {
        this.countMe();
    enter code here
        DataSet tmpDs = new DataSet();
        tmpDs.ReadXml(Server.MapPath("~/counter.xml"));

        lblCounter.Text = tmpDs.Tables[0].Rows[0]["hits"].ToString();
    }

    private void countMe()
    {
        DataSet tmpDs = new DataSet();
        tmpDs.ReadXml(Server.MapPath("~/counter.xml"));

        int hits = Int32.Parse(tmpDs.Tables[0].Rows[0]["hits"].ToString());

        hits += 1;

        tmpDs.Tables[0].Rows[0]["hits"] = hits.ToString();

        tmpDs.WriteXml(Server.MapPath("~/counter.xml"));

    } 

然后,您需要在根目录中有一个xml文件,以使代码也能正常工作。 XML文件如下所示:

<?xml version="1.0" encoding="utf-8" ?>
<counter>
  <count>
    <hits>0</hits>
  </count>
</counter>

答案 2 :(得分:2)

在第一个答案中你已经全局声明了count变量,这就是为什么在每个新的会话计数从0开始为了更好的结果,在session_start方法中增加application []变量。

答案 3 :(得分:1)

通常您为该任务使用其他工具(weblog分析器)。

当您将值存储在Memory(Application [“myCount”])中时,此值将无法在服务器重新启动后继续存在。所以你必须将它存储在

  • 数据库
  • 纯文本文件
  • 任何