之前在《一种基于自定义代码记录用户访问日志在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,欢迎各位加入交流

网站日志访问记录组件UserVisitLogsHelp开源了!的更多相关文章

  1. Shell 命令行统计 apache 网站日志访问IP以及IP归属地

    Shell 命令行统计 apache 网站日志访问IP以及IP归属地 我的一个站点用 apache 服务跑着,积攒了很多的日志.我想用 shell 看看有哪些人访问过我的站点,并且他来自哪里. 因为日 ...

  2. 一个简易Asp.net网站日志系统

    前不久在网站上看到了网站日志访问记录组件UserVisitLogsHelp开源了! 这篇博客感觉还不错,就把源码download了下来,学习一下,发现里面的代码书写和设计并不是很好,于是自己改了改.自 ...

  3. log4net--不可多得的开源日志记录组件

    log4net--不可多得的开源日志记录组件 1 前奏 一直在用log4net日志工具,却没时间写个日志给大家分享一下这个工具,趁最近比较空些,好好分享一下这个工具. 2 说明 Log4net介绍就不 ...

  4. Elmah 日志记录组件

    http://www.cnblogs.com/jys509/p/4571298.html 简介 ELMAH(Error Logging Modules and Handlers)错误日志记录模块和处理 ...

  5. Linux centos7 VMware Apache访问日志不记录静态文件、访问日志切割、静态元素过期时间

    一.Apache访问日志不记录静态文件 网站大多元素为静态文件,如图片.css.js等,这些元素可以不用记录 vim /usr/local/apache2.4/conf/extra/httpd-vho ...

  6. 【干货】.NET开发通用组件发布(四) 日志记录组件

    组件介绍和合作开发 http://www.cnblogs.com/MrHuo/p/MrHuoControls.html 日志记录组件功能介绍 通过基类Logger,实现了文本记录日志和数据库记录日志两 ...

  7. MVC使用 Elmah 日志记录组件

    在后台管理中,有一些操作是需要增加操作日志的,尤其是对一些比较敏感的金额类的操作,比如商城类的修改商品金额.删除商品.赠送金额等人工的操作.日志中记录着相关操作人的操作信息,这样,出了问题也容易排查. ...

  8. ASP.NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

    一.前言 在项目开发中,日志系统是系统的一个重要组成模块,通过在程序中记录运行日志.错误日志,可以让我们对于系统的运行情况做到很好的掌控.同时,收集日志不仅仅可以用于诊断排查错误,由于日志同样也是大量 ...

  9. NET Core 实战:使用 NLog 将日志信息记录到 MongoDB

    NET Core 实战:使用 NLog 将日志信息记录到 MongoDB https://www.cnblogs.com/danvic712/p/10226557.html ASP.NET Core ...

随机推荐

  1. Java_集合与泛型

    Collection 集合,集合是java中提供的一种容器,可以用来存储多个数据.在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数组既然都是 ...

  2. 世界杯:用Python分析热门夺冠球队-(附源代码)

    2018年,火热的世界杯即将拉开序幕.在比赛开始之前,我们不妨用 Python 来对参赛队伍的实力情况进行分析,并大胆的预测下本届世界杯的夺冠热门球队. 通过数据分析,可以发现很多有趣的结果,比如: ...

  3. python 对字典"排序"

    对字典进行排序?这其实是一个伪命题,搞清楚python字典的定义---字典本身默认以key的字符顺序输出显示---就像我们用的真实的字典一样,按照abcd字母的顺序排列,并且本质上各自没有先后关系,是 ...

  4. 机器学习之路:python 字典特征提取器 DictVectorizer

    python3 学习使用api 将字典类型数据结构的样本,抽取特征,转化成向量形式 源码git: https://github.com/linyi0604/MachineLearning 代码: fr ...

  5. 洛谷.4525.[模板]自适应辛普森法1(Simpson积分)

    题目链接 Simpson积分公式:\[\int_a^bf(x)dx\approx\frac{b-a}{6}\left[f(a)+f(b)+4f(\frac{a+b}{2})\right]\] 推导过程 ...

  6. BZOJ.2716.[Violet3]天使玩偶(K-D Tree)

    题目链接 KD-Tree.因为插入过多点后可能会退化成链,所以左/右子树sz > α*整棵子树sz时对整棵子树进行重构. 树的节点数必须是3n?why?洛谷,BZOJ都这样..(数据范围错了吧 ...

  7. 【洛谷】2474:[SCOI2008]天平【差分约束系统】

    P2474 [SCOI2008]天平 题目背景 2008四川NOI省选 题目描述 你有n个砝码,均为1克,2克或者3克.你并不清楚每个砝码的重量,但你知道其中一些砝码重量的大小关系.你把其中两个砝码A ...

  8. ZOJ 3632 K - Watermelon Full of Water 优先队列优化DP

    K - Watermelon Full of Water Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%lld &am ...

  9. poj 1330 Nearest Common Ancestors 单次LCA/DFS

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19919   Accept ...

  10. ASP.NET Web API 记录请求响应数据到日志的一个方法

    原文:http://blog.bossma.cn/dotnet/asp-net-web-api-log-request-response/ ASP.NET Web API 记录请求响应数据到日志的一个 ...