利用HttpModule做流量记录 补充
2007-08-29 13:56
218 查看
上篇文章《利用HttpModule做流量记录》中我描述了如何利用HttpModule做流量统计。大家提出了很多的建议。我这里需要说明一下。
对需求我需要补充一下:
1、记录流量数据是最低需求。
2、必须记录用户信息。如果非登陆用户,记录IP等信息;如果登陆用户,需要附加记录用户ID,用户名等信息(准备放在Session中)。
3、需要实时统计在线用户信息,查看登陆用户的访问记录。
4、跟踪用户访问记录。
5、有一部分用户日志功能:用户可以查看自己的访问记录。而且最好实时。
对数据记录的优化补充:
1、我在文章中已经红字标明:“数据存储层,可以根据自己的需要重写此层。想存数据库也行,XML也行”,所以我并非实际实现就是这样。
2、对于大量数据储存问题,已经在考虑,目前在考虑 武眉博<活靶子.NET> 和 kiler 的建议,在这里谢谢二位。但是缓存数据后过一段时间或者凑够一定的数目再写入数据库记录这样的话有可能影响实时性,另外如果数据量很大,内存占用和一下子写数据时的大数据量写入问题也同样存在。
3、自己考虑认为流量数据库将和业务数据库分开,最好考虑用流量数据库服务器单独。
4、用户访问信息统计系统将独立于网站。
用户信息记录的其他方法(由于安全问题已经否决):
1、采用JS的话如何带过去用户信息:可以用QueryString方式传递。
2、加入JS的是其他人也可以对流量统计进行干扰。
3、判断JS的被引用的页面是否是要记录的页面。但是模拟被引用页面是可以做到的。
关于一部分代码的改变!
public void Init(HttpApplication application)
{
//这里更改,这个BeginRequest事件里面无法获取到Session,疏忽,望大家谅解!应改用AcquireRequestState事件!
//application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
application.AcquireRequestState+=new EventHandler(application_AcquireRequestState);
}
如果选用从Session中传入用户信息或者其他需要记录的信息,请在记录前加判断(2007年8月29日20:34:43增加)
if (ctx.Handler is Page || ctx.Handler is WebService)
根据需要选用Page还是WebService。
调试过程中发现,如果是其他的类型可能不创建Session,这时从Session读取数据发生错误,造成整个请求中断引起请求失效。这样其他的Module可能不能执行造成页面上一些需要生成的东西无法生成,例如Asp.net Ajax从WebService生成的脚本类型注册等,引发错误!
尽量捕捉错误,因为这些错误可能不会直接爆出,引发请求中断,让人有的时候摸不着头脑!
希望大家多多给点建议,不过这样的建议好似一点意义都没有啊!o(∩_∩)o...
“
re: 利用HttpModule做流量记录[未登录]
2007-08-28 21:56 | Allen Zhang
[align=left]垃圾文章天天有 [/align]
”
如果有更好的解决方案,希望大家也不要小气共享一下,谢谢!
对需求我需要补充一下:
1、记录流量数据是最低需求。
2、必须记录用户信息。如果非登陆用户,记录IP等信息;如果登陆用户,需要附加记录用户ID,用户名等信息(准备放在Session中)。
3、需要实时统计在线用户信息,查看登陆用户的访问记录。
4、跟踪用户访问记录。
5、有一部分用户日志功能:用户可以查看自己的访问记录。而且最好实时。
对数据记录的优化补充:
1、我在文章中已经红字标明:“数据存储层,可以根据自己的需要重写此层。想存数据库也行,XML也行”,所以我并非实际实现就是这样。
2、对于大量数据储存问题,已经在考虑,目前在考虑 武眉博<活靶子.NET> 和 kiler 的建议,在这里谢谢二位。但是缓存数据后过一段时间或者凑够一定的数目再写入数据库记录这样的话有可能影响实时性,另外如果数据量很大,内存占用和一下子写数据时的大数据量写入问题也同样存在。
3、自己考虑认为流量数据库将和业务数据库分开,最好考虑用流量数据库服务器单独。
4、用户访问信息统计系统将独立于网站。
用户信息记录的其他方法(由于安全问题已经否决):
1、采用JS的话如何带过去用户信息:可以用QueryString方式传递。
2、加入JS的是其他人也可以对流量统计进行干扰。
3、判断JS的被引用的页面是否是要记录的页面。但是模拟被引用页面是可以做到的。
关于一部分代码的改变!
public void Init(HttpApplication application)
{
//这里更改,这个BeginRequest事件里面无法获取到Session,疏忽,望大家谅解!应改用AcquireRequestState事件!
//application.BeginRequest += (new EventHandler(this.Application_BeginRequest));
application.AcquireRequestState+=new EventHandler(application_AcquireRequestState);
}
如果选用从Session中传入用户信息或者其他需要记录的信息,请在记录前加判断(2007年8月29日20:34:43增加)
if (ctx.Handler is Page || ctx.Handler is WebService)
根据需要选用Page还是WebService。
调试过程中发现,如果是其他的类型可能不创建Session,这时从Session读取数据发生错误,造成整个请求中断引起请求失效。这样其他的Module可能不能执行造成页面上一些需要生成的东西无法生成,例如Asp.net Ajax从WebService生成的脚本类型注册等,引发错误!
尽量捕捉错误,因为这些错误可能不会直接爆出,引发请求中断,让人有的时候摸不着头脑!
希望大家多多给点建议,不过这样的建议好似一点意义都没有啊!o(∩_∩)o...
“
re: 利用HttpModule做流量记录[未登录]
2007-08-28 21:56 | Allen Zhang
[align=left]垃圾文章天天有 [/align]
”
如果有更好的解决方案,希望大家也不要小气共享一下,谢谢!
相关文章推荐
- 利用HttpModule做流量记录 补充
- 利用HttpModule做流量记录 画蛇添足最后一笔
- 利用HttpModule做流量记录 画蛇添足最后一笔
- 利用HttpModule做流量记录
- 利用HttpModule做流量记录
- 利用HttpModule做流量记录
- 利用HttpModule做流量记录 画蛇添足最后一笔
- 利用HttpModule做流量记录 画蛇添足最后一笔
- asp.net简单实现利用HttpModule实现防sql注入
- 利用HttpModule实现防sql注入
- nginx 流量拷贝模块 ngx_http_mirror_module 安装试用
- 利用自定义IHttpModule来实现URL地址重写
- 利用HttpModule实现防sql注入
- 利用HttpModule集中处理身份检查
- --with-http_realip_module选项(后台Nginx服务器记录原始客户端的IP地址 )
- 80端口复用:利用haproxy把http流量和ssh流量分别转发到web服务器和ssh服务器
- ASP.NET下利用HttpModule实现简体中文向繁体中文的自动转换
- 利用HttpModule实现防sql注入
- 处理IHttpHandler和IHttpModule接口来做流量分析系统
- 利用HttpModule实现浏览器版本控制