網站日志訪問記錄組件UserVisitLogsHelp開源了!


    之前在《一種基於自定義代碼記錄用戶訪問日志在Sharepoint網站的應用方法!》一文利用本人幾年前的開發的UserVisitLogsHelp組件進行了網站用戶訪問日志記錄,可用於網站分析,雖然IIS可以有日志記錄的功能(也可通過工具分析),但它的主要缺點是可定制性相對較差,難以滿足個性化的需求,只能用於windows平台的站點,有很大的局限性。通過該組件不僅能用於asp.net等windows平台網站,也可以用於PHP、JSP等Linux網站。該組件目前已在Codeplex網站中開源了,具體網址如下:http://uservisitlogshelp.codeplex.com/

     該組件實現原理很簡單:主要利用IHttpModule接口並在Web.config中的HttpModule節點添加此組件的配置,考慮到性能和可移植性,數據庫采用開源Sqlite,方便維護和數據采集。

     Sqlite日志數據庫網站用戶訪問日志表(UserVisitLog)結構設計如下:

編號

字段名稱

字段類型

備注

1

Id

integer

自增序號(PK,Not Null)

2

UserHostAddress

varchar(20)

遠程客戶端的IP主機地址

3

UserHostName

varchar(20)

遠程客戶端的DNS名稱

4

UrlAbsoluteUri

varchar(1600)

當前請求的絕對URI

5

PhysicalPath

varchar(500)

當前請求的URL相對應的物理文件路徑

6

UserAgent

varchar(1000)

客戶端瀏覽器的原始用戶代理信息

7

HttpMethod

varchar(4)

客戶端使用的HTTP數據傳輸方法

8

UserLanguages

varchar(20)

客戶端語言首選項的排序字符

9

UrlHost

varchar(100)

客戶端主機的實例名

10

UrlPort

varchar(10)

當前URI的端口號

11

TotalBytes

integer

當前輸入流中的字節數

12

ContentLength

integer

客戶端發送的內容長度(以字節計)

13

IsLocal

varchar(5)

當前請求是否來自本地計算機

14

BrowserType

varchar(30)

瀏覽器的名稱和主(整數)版本號

15

BrowserVersion

varchar(20)

瀏覽器的完整版本號(包括整數和小數)

16

BrowserPlatform

varchar(20)

客戶端使用的操作系統平台名稱

17

BrowserBeta

varchar(5)

瀏覽器是否為測試版

18

BrowserActiveXControls

varchar(5)

瀏覽器是否支持ActiveX控件

19

BrowserCookies

varchar(5)

瀏覽器是否支持Cookie

20

BrowserCrawler

varchar(5)

瀏覽器是否為Web爬行遍歷搜索引擎

21

BrowserJavaScript

varchar(5)

瀏覽器支持的EcmaScript主版本號

22

BrowserSupportsXmlHttp

varchar(5)

瀏覽器是否支持通過HTTP接收XML

23

BrowserInputType

varchar(30)

瀏覽器支持的輸入類型

   24

BrowserScreenPixelsWidth

integer

瀏覽器顯示的近似寬度(單位像素)

   25

BrowserScreenPixelsHeight

integer

瀏覽器顯示的近似高度(單位像素)

   26

UrlReferrerAbsoluteUri

varchar(1600)

客戶端上次請求(該請求鏈接當前的URL)的絕對URI

   27

UrlReferrerAbsoluteUriDecode

varchar(1600)

對UrlReferrerAbsoluteUri字段進行zh-cn或utf-9解碼

   28

UrlReferrerHostName

varchar(100)

客戶端上次請求(該請求鏈接當前的URL)的DNS名稱

   29

CanCombineFormsInDeck

varchar(5)

瀏覽器是否支持包括多個窗口的卡片組

   30

IsMobileDevice

varchar(5)

瀏覽器是否為已識別的移動設備

   31

MobileDeviceManufacturer

varchar(30)

已知移動設備制造商的名稱

   32

MobileDeviceModel

varchar(30)

已知移動設備的型號名

  33

NumberOfSoftkeys

integer

移動設備上軟鍵的數目

  34

ContentEncoding

varchar(10)

內容字符的編碼

  35

ScreenBitDepth

integer

瀏覽器顯示的近似深度(單位像素)

  36

Website

varchar(100)

訪問Web站點

  37

WebCookies

varchar(80)

記錄當前訪客的惟一Cookies值

  38

VisitTime

varchar(20)

當前請求訪問時間

 三種典型的應用場景:

1.asp.net(SharePoint) 網站
   在web.config 的 <httpModules> 節點加入:
   <httpModules>
   <add name="WebsiteVisit" type="NetOpen_System.Component.WebsiteVisitHttpModule,    NetOpen_System.Component.WebsiteVisit"/>
</httpModules>
 
2.SharePoint 網站
   獨立部署的網站日志訪問站點,可以通過JS代碼方式進行頁面跟蹤,對於企業內部網站可以取得登錄AD的用戶信息:
 
<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://webloggersite/Default.aspx?UserName=" +currentUser+"&UserTitle="+currentUserTitle;
         

        },
        function (data) {
            //notify the failure
           
    });
   
}
</script>
    <img id="randimg" name="randimg" src="" style="width:0;height:0;" />

3.其他網站(PHP,JSP,ASP等)
   網站頁面JS跟蹤代碼:
    <script type="text/javascript">
       function addImg(isrc) {
           var Img = new Image();
           Img.style = "width:0;height:0;";
           Img.onload = function () {
               document.body.appendChild(Img);
           }
           Img.src = isrc;
       }
       addImg("http://webloggersite/Default.aspx");
</script>
    <img id="randimg" name="randimg" src="" style="width:0;height:0;" />
 
自動生成日志數據庫Sqlite的配置文件(日志數據庫可按年,按月,按天或不生成等):
NetOpen_SystemWebsiteVisit.cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<NetOpen_System>
  <WebsiteVisit>
    <!--DateSource Automatic Generation of Database File year:one year month:every month day:every day None:Does not generate -->
    <SQLiteConnectings DataSource="~/Visit_Data/HomeWeb" Password="12345678" DateSource="day" Website="" ExcludeUrl="" DecodeUrl="" TextDecoding="utf-8" ExcludeUserAgent="" WebCookiesName="" WebCookiesExpires="3650"/>
  </WebsiteVisit>
</NetOpen_System>
 
 

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


免責聲明!

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



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