2009-10-03 73 views
7

我想爲我的Web應用程序的所有用戶保留每個頁面視圖的日誌。經過足夠的時間後,我將使用該日誌生成報告。我希望記錄機制有點靈活,因爲我不需要記錄每個http請求。跟蹤用戶對asp.net mvc網站的活動/操作?

一個示例用例是:一家公司註冊我的Web應用程序,並允許5名員工使用該應用程序。我想報告上週有3名員工使用了該應用程序。或者顯示4名員工在今年6月至8月間使用了它。

我正在使用asp.net mvc與sql服務器,如果這有所作爲。

它就這麼簡單嗎?使用以下列創建一個sql表:UserId,ControllerName,ActionName,ActionParameters,CreatedOn。然後創建一個ActionFilterAttribute,爲每個調用的操作添加一條記錄到數據庫。

是否有任何我應該擔心的缺陷(除了潛在的大表格大小)?

+2

也許更具擴展性的解決方案是使用Google Analytics並追蹤我可以解析的「虛擬網址」。 Like/reports////。之後,使用他們的數據饋送api並解析響應 – 2009-10-03 20:02:24

+1

不安全,用戶可以關閉JS或阻止GA。 – queen3 2009-10-03 20:47:37

回答

6

一些缺陷:

  1. 您將無法做任何服務器級別的頁面緩存。
  2. 因爲您實際上正在記錄每個請求,所以大量的db寫入。
  3. 如果網頁上有任何操作可能會存儲冗餘信息。

我會假設你會實現這在某些類型的自定義AuthorizeAttribute的讓你不編碼它的每一個控制器上,但那麼這將是字面上這將可能會超過你的實際需要每一個要求。

您是否考慮過使用某種類型的IIS日誌分析工具?它會有很多你需要的信息。

0

查看IActionFilter接口 - 您可以編寫自己的類來實現此功能,並記錄您需要的任何內容。

2

如果您願意使用JavaScript,另一種選擇是您可以實施一些與SiteCatalyst相同的功能。您可以在頁面加載時使用JavaScript從客戶端發送請求到控制器操作,並使用url中的相應信息發送請求。例如:

www.example.com \ AnalyticsController \行動\ currentController \ currentAction \用戶名

的好處是,你的日誌不按順序與所有其他操作執行,你也許可以得到它通過將工作母版頁中的AJAX調用。

不足之處在於它使用的JavaScript可能會被禁用。欺騙也很容易。