一種基於自定義代碼記錄用戶訪問日志在Sharepoint網站的應用方法!


     對於網站或系統的用戶訪問日志商業產品有谷歌統計、百度統計、量子統計等,這些產品優點是功能強大,缺點是可定制性相對較差,難以滿足個性化的需求。本文介紹一種基於定義代碼方式記錄SharePoint網站或系統的用戶訪問日志,用戶訪問日志的組件復用本人兩年多前為學位論文基於C#開發的用戶訪問日志,該組件實現原理很簡單:主要利用IHttpModule接口並在Web.config中的HttpModule節點添加此組件的配置,考慮到性能和可移植性,數據庫采用開源Sqlite,方便維護和數據采集。具體實現步驟如下:

    1.利用該用戶訪問日志組件如果是.net開發的網站,一種方式可以直接在網站的Web.config中HttpModule節點中添加,另一種是專門建立一個用戶訪問日志站點,利用該站點就可以記錄任何網站的訪問日志(無論是.Net、PHP、Java等),主要是利用一段嵌入的JS代碼就可以,本質方法同商業級的產品相同,考慮到性能和獨立性,本文使用后一種方法。

    2.在需要統計的Sharepoint頁面加入兩段JS代碼,一段JS主要用戶獲取當前登錄的用戶信息,另一段是用於記錄訪問日志。

    3.利用SSIS工具,自動把用戶訪問日志數據庫(Sqlite)導入到日志數據倉庫中(SQL SERVER),開發一個用於Url解編碼的SQL CLR。

    4.利用SSRS工具,開發一個用戶訪問日志的報表並部署到Sharepoint網站中以供查詢。

比如要在excelservicesample.aspx增加日志訪問記錄功能,可以用Sharepoint Designer進行編輯,如下圖:

編輯excelservicesample.aspx,加入日志訪問JS代碼如下:

<script type="text/javascript" > SP.SOD.executeOrDelayUntilScriptLoaded(runMyCode, "SP.js"); var currentUser = null; var currentUserTitle=null; function runMyCode() { var ctx = new SP.ClientContext.get_current(); var web = ctx.get_web(); ctx.load(web); var user = web.get_currentUser(); user.retrieve(); ctx.executeQueryAsync( function () { //only in the success case you can work with user login
 currentUser= user.get_loginName(); currentUserTitle = user.get_title(); document.getElementById("randimg").src="http://10.30.99.118:8081/Default.aspx?UserName=" +currentUser+"&UserTitle="+currentUserTitle; }, function (data) { //notify the failure
 }); } </script>
    <img id="randimg" name="randimg" src="" style="width:0;height:0;" />

保存並發布,如下圖:

訪問該頁面,測試一下訪問日志是否已被記錄,如下圖:

 如果記錄成功,將在日志訪問記錄站點自動創建相應的日志數據庫,如下圖:

可以在VS中連接此數據庫看看是否已記錄,如下圖:

 可以在UrlAbsoluteUri看到,在JS的URL已記錄,如下圖:

可以在UrlReferrerAbsoluteUri看到,真正的訪問頁面Url,如下圖:

搭建一個日志訪問記錄網站,如下圖:

 

再測試一個記錄頁面,比如要在default.aspx增加日志訪問記錄功能,可以用Sharepoint Designer進行編輯,增加JS代碼,如下圖:

打開default.aspx,測試訪問日志是否已被記錄,如下圖:

在VS查看日志數據庫,Default頁面的日志已被記錄,如下圖:

 開發一個用於URL編節目的SQL CLR函數:SqlServerProject,並在SQL SERVER進行注冊:

 

exec sp_changedbowner 'sa' 
go

--啟用數據庫CLR支持
  EXEC sp_configure 'show advanced options','1';
  go 
  reconfigure;
  go
  EXEC sp_configure 'clr enabled','1'
  go
  --更改數據庫信任模式(為正確添加到程序集)
  Alter Database 數據庫名 SET TRUSTWORTHY ON
  GO
  
  
  CREATE assembly
  [system.web] from 
  'C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\system.web.dll'
  with permission_set=unsafe
  go


  CREATE assembly
    SQL_CLR_Url from 
    'D:\SqlServerProject\SqlServerProject.dll'
    with permission_set=unsafe
    go



 CREATE FUNCTION [dbo].[SqlUrlDecode](@urlstr nvarchar(4000))
RETURNS nvarchar(4000)
AS 
EXTERNAL NAME SQL_CLR_Url.UserDefinedFunctions.SqlUrlDecode
GO

CREATE FUNCTION [dbo].[SqlUrlEncode](@urlstr nvarchar(4000))
RETURNS nvarchar(4000)
AS 
EXTERNAL NAME SQL_CLR_Url.UserDefinedFunctions.SqlUrlEncode
GO

 

執行成功,如下圖:

 

開發一個日志訪問統計報表,如下圖:

點擊可以查看日志明細,如下圖:

      經過以上步驟,就簡單實現了Sharepoint網站或系統的用戶訪問日志功能,可以根據具體需求進行擴展,以符合個性化的需求。

    本人的日志訪問記錄組件已開源,歡迎訪問下載:http://uservisitlogshelp.codeplex.com/

本博客為軟件人生原創,歡迎轉載,轉載請標明出處:http://www.cnblogs.com/nbpowerboy/archive/2013/06/12/3133169.html 。演繹或用於商業目的,但是必須保留本文的署名軟件人生(包含鏈接)。如您有任何疑問或者授權方面的協商,請給我留言。SharePoint商業智能技術QQ群:140668362,.Net技術交流QQ群:195516928,歡迎各位加入交流


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM