• 网站日志访问记录组件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="0;height:0;" />

    3.其他网站(PHP,JSP,ASP等)
       网站页面JS跟踪代码:
        <script type="text/javascript">
           function addImg(isrc) {
               var Img = new Image();
               Img.style = "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="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,欢迎各位加入交流

  • 相关阅读:
    一家软件公司的笔试题
    利用jQuery实现多文件上传
    利用jquery实现内容回滚
    获取MS SQL库数据字典的经典SQL语句
    利用jQuery实现Gridview 选中行相关数据显示
    油气井是怎么打成的
    数据库问题小记(SQL 2000系列)
    利用jQuery实现GridView固定表头
    经典SQL语句
    jQuery改变GridView的样式
  • 原文地址:https://www.cnblogs.com/nbpowerboy/p/3158507.html
Copyright © 2020-2023  润新知