【问题标题】:Count Number of Visitors in WebSite using ASP.Net and C#使用 ASP.Net 和 C# 计算网站中的访问者数量
【发布时间】:2009-10-02 09:20:28
【问题描述】:

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

我在 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;
}

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

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

那么谁能告诉我如何完成这项任务?

请帮帮我! 提前致谢!

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    如果您希望计数在应用程序重新启动时不断增加,您需要将该值存储在某处 - 数据库或文件中的某处,并在应用程序启动时加载该值。

    此外,您可以使用以下方法确保显示的字符数始终至少为 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”下的方法以获取有关如何查询和更新的详细信息数据库。

    【讨论】:

      【解决方案2】:

      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>
      

      【讨论】:

      • 单人刷新页面串联时,计数器数量增加!!
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        您通常使用其他工具来完成该任务(网络日志分析器)。

        当您将值存储在内存 (Application["myCount"]) 中时,该值将无法在服务器重新启动后继续存在。所以你必须将它存储在一个

        • 数据库
        • 纯文本文件
        • 随便

        【讨论】:

        • 好的,谢谢您的回复。如果你不介意你能告诉我怎么做吗?将其存储在数据库或文本文件中是否有利?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        • 1970-01-01
        相关资源
        最近更新 更多