2011-06-28 44 views

回答

2

你需要在數據庫中存儲的一些信息:

訪問者IP地址,訪問URL(網頁方式用戶/客人訪問了哪些)

爲每個頁面創建一個函數,並顯示您的總數根據您的數據庫列訪問URL和IP地址。

喜歡的東西(如下)將只跟蹤訪問頁面的數量,但你可以擴展這個,如果你想獨特訪問:

void Session_Start(object sender, EventArgs e) 
{ 
    // More secure than storing it application variables(does not rest on application start 
    SqlConnection con = null; 
    SqlCommand cmd = null; 
    try 
    { 
     con = new SqlConnection(); 
     con.ConnectionString = "your connection string"; 
     cmd = new SqlCommand(); 
     cmd.Connection = con; 
     con.Open(); 
     cmd.CommandText = "Update tbl_users Set no_of_users=no_of_users+1"; 
     cmd.ExecuteNonQuery(); 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
    finally 
    { 
     if (con.State.Equals(ConnectionState.Open)) con.Close(); 
    }  
} 

或者,您也可以調用一個存儲過程,而遞增訪問次數。

1

我會使用像AWStats的http://awstats.sourceforge.net/

計算唯一訪問者的工具,是很難的,因爲你不能確定唯一身份訪問者準確。你只能猜測(IP,Cookies,UserAgend等)。

計數訪客可以通過計算會話的開始來完成。但是,如果你的訪客不接受甚至溫度。餅乾,你會經常數訪客。

2

我能夠使用會話變量,ASP.NET MVC中的SQL Server數據庫做到這一點。

注:我用的不是存儲客戶端IP地址的會話變量。因爲保存所有的客戶端地址會使數據庫溢出。這與在右上角的每個問題顯示的Stackoverflow頁面查看屬性類似。

這是如何爲我工作的。

    每當用戶打開你的網站的特定網頁
  • ,則計數器增加和更新的計將在SQL Server數據庫進行更新(也可能是任何其它數據庫)表。
  • 如果同一用戶在同一個會話中再次訪問同一個網頁,則計數器不會被累加。這意味着如果用戶在同一個會話中多次刷新網頁,計數器將不會增加,因爲這是該用戶的單次訪問。
  • 如果同一個訪問者關閉他的會話(假設他關閉了瀏覽器)並重新打開相同的網頁,則計數器會被視爲單獨訪問而遞增。

下面是我遵循的步驟來實現它。

  1. 有一個方法會在每個Action方法之前自動調用。
  2. 在此方法中,如果尚未完成會話,則啓動會話並檢查用戶是否已經訪問過此頁面。
  3. 現在,相應地更新計數器變量並在需要時將計數保存到db。

這是我遵循的完整程序。希望能幫助到你。

來源:Count number of visitors of a page in asp.net mvc (HIT counter)

相關問題