2009-10-02 22 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方法內部變量。

相關問題