2009-10-02 21 views
7

我想跟踪访问我网站的访问者数量。使用ASP.Net和C计算Web站点中的访问者数量#

我试图在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开始,这在逻辑上是错误的。

我要计数的值由1从最后的计数值递增。

因此,谁能告诉我如何完成这个任务?

请帮我一把! 在此先感谢!

回答

7

如果你想计数不断递增超过重新启动应用程序,你需要在一些地方保存的值 - 在数据库或文件的地方,并加载价值高达应用程序启动时。

此外,您还可以使用以下,以确保您的显示计数总是至少4个字符:

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

更多信息,请参见Custom Numeric Format Strings


编辑回应置评

就个人而言,我推荐使用在写入文件系统的数据库,至少有以下原因:

  1. 根据您的主机,设置数据库可能比启用对文件系统的写入访问要容易得多。
  2. 使用数据库将允许您将其存储为int,而不是string
  3. 在交通繁忙的情况下,您会遇到多个线程尝试打开文本文件进行写入访问的问题 - 这会导致文件锁定,并导致您不需要的瓶颈。

各种资源,将告诉你如何连接到您的代码数据库,良好的开端是这个How To: Connect to SQL Server,并寻找到关于如何查询“What are the alternatives”下的方法的详细信息和更新数据库。

1

通常你使用其他工具,这些任务(博客分析仪)。

当您存储在内存值(应用[“mycount的”])这个值将无法生存重新启动服务器。所以,你必须将其存储在

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

好的,谢谢你的回复。 如果你不介意,你能告诉我该怎么做吗?并将它存储在数据库或文本文件中是否有利? – Sheetal

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> 
+0

单人刷新页面串联时,柜台数量增加! – AminM

2

在第一个答案ü不得不宣布全球计数变量,这就是为什么在每一个新的会话数与0.for更好的结果开始,增值应用[]在session_start方法内部变量。

相关问题