基于HttpModule的页面访问日志

2022-11-10

在开发企业Asp.netWeb应用时经常需要以日志的方式记录用户的访问信息, 以便了解访问本站的用户兴趣点在那里, 从而改进自己的站点, 提高用户的访问量。通常的做法编写一个记录日志的类, 然后在每个页面中调用该类的以记录用户的访问。这样的方法在站点的页面较少的时候可行, 但是当项目比较大时, 这种方法就显得比较繁琐。另外一种情形是原来的系统并没有日志功能, 如果用上面的方法来添加日志功能, 则必须修改整个网站的每个页面, 工作量很大。

本文提出了一种基于HttpModule创建用户页面访问日志的方法, 它不需修改原站点工作正常的页面, 就可实现记录本站点用户访问日志的功能, 这比原来的方法简便不少, 且维护也很方便。

1 HttpModule简介

要了解HttpModule的工作原理, 首先得了解一下ASP.NET请求的处理过程。

ASP.NET请求处理过程是基于管道模型的, 在模型中ASP.NET把http请求传递给管道中的所有Module。每个Module都接收http请求并有完全控制权限。Module可以用任何自认为适合的方式来处理请求。一旦请求经过了所有HttpModule, 就最终被H TTP处理程序处理。HTTP处理程序对请求进行一些处理, 并且结果将再次经过管道中的HttpModule。如图1所示。

HttpModule是实现了System.Web.IHttpM odule接口的.NET组件。这些组件通过在某些事件中注册自身, 把自己插入ASP.NET请求处理管道。当这些事件发生的时候, ASP.NE T调用对请求有关的HttpModule, 这样该Mod ule就能处理请求了。

本方法的工作原理就是制作一个负责日志记录的HttpModule, 并在合适的事件中注册, 当用户的请求到来时, 记录相应的数据以完成日志记录。

2 创建页面访问日志的IHttpModule

HttpModule要实现IHttpModule接口的下面一些方法 (如表1) 。

在此, 我们首先在站点的App_Code文件夹中创建一个实现了上述方法的类MyH ttpModel。其关键代码如下:

为了记录用户的访问数据, 本文设计了一个名为UserLog (id, usersession, IP, dat etime, url) 的简单表。其中id是编号, users ession记录注册用户标识, IP表示访问者的IP地址, datetime表示访问时间, 它由SqlSer ver在插入数据时自动记录, url表示访问者请求的页面。

这个类的主要内容是一个用来记录用户访问数据的方法onRequest, 另外就是把此方法注册到AcquireRequestState事件中。

接下来要在web.config注册这个HttpM odul.

在web.config中的段中增加一行:

这样注册就完成了。

接下来就可在几个不同IP的计算机上测试一下, 看看自定义HttpModule是否工作正常。

另外要作的一件事就是作一个简单的页面用以显示所有的日志记录 (如图2) 。

3 结语

通过以上制作过程可知, 本文所提出的利用HttpModule创建用户页面访问日志方法实现简单, 而且不需对原页面作任何的修改。它可记录任何用户对页面的访问, 方便管理员考查用户对自己站点中那部分最感兴趣, 从而改进自己的站点。它的缺点就是只能针对于aspx的页面, 如要记录对普通的html页面的访问则必需另作设置。

摘要:本文给出了一种基于HttpModule的记录用户访问日志的方法, 该方法实施简便, 且不需要对站点中的页面作任何修改。

关键词:HttpModule,访问日志

参考文献

[1] (意) Dino Esposito[著], 罗兵, 顾雁宏, 詹文军[译].精通ASP.NET程序设计[M].清华大学出版社, 2006.7.

[2] skyaspnet.ASP.NET HttpModule原理.[EB/OL].http://blog.csdn.net/skyasp net/archive/2009/02/05/3865126.asp x.

[3] Microsoft.MSDN Library for Visual S tudio[M/CD], 2008, 12.

上一篇:该有几支力量来承担大学教育的责任——从2008年10月三件校园血案谈起下一篇:以静制静法——如何用不管理的管理方法