网站页面、按钮、登录信息统计
2014-01-02 20:04
477 查看
最后公司搞了个UBA(用户行为分析)系统,就是想把公司里所有用到的网站的页面、按钮、登录等信息全部收集到了一起,然后进行分析统计。刚好我做的一个网站项目一期已经完工,现在也要弄这东西,看公司以前几个ASP.NET网站做的收集处理,就是在每个页面的PAGELOAD和按钮事件里面都加一行收集代码。我一想几十个页面都要加这个,并且每个事件里面还得加,这真麻烦。
我在想有没有一个好办法,能统一在页面和按钮的某个生命周期上加个事件,或监听每个页面和按钮被访问。本着自己想到的事,可以别人已经做好了的思想去网上转了下,HTTPMODEL、HTTPHANDLE都仔细考虑下,发现有点难。最后无意发现了个好东西/article/4763197.html里介绍了一个pageadapter,它能够处理页面的每个生命周期,再看了作者写的代码,然后在VS里一找发现这个东西的老祖宗是controladapter,也就是说它能对控件都有效果。那这事就超级简单了。
1.写一个类继承pageadapter,重写page_load事件处理第一次访问页面时的记录收集
这里UBAHelper是我们UBA系统信息收集类,WebLogManager是log4net针对我们网站的一个帮助类,在这里就不说了。
2.写一个类继承ControlAdapter处理Button按钮事件,这个按钮事件处理起来有点技巧等下看代码就知道了
这里为了收集按钮事件,就采用了事件注册机制btn.Click += delegate(object sender, EventArgs ev){...}这样只要这个按钮被触发,那这个事件也被触发。
写完这两个就是把这两个类加到App_Browsers\xxx.browser文件里就完了
一个是记录全网站的所有继承BasePage的页面行为,一个是记录全网站的Button的行为,登录记录信息我是写在session_start里,如还需记录其它信息,随便改改也应该不难。
我在想有没有一个好办法,能统一在页面和按钮的某个生命周期上加个事件,或监听每个页面和按钮被访问。本着自己想到的事,可以别人已经做好了的思想去网上转了下,HTTPMODEL、HTTPHANDLE都仔细考虑下,发现有点难。最后无意发现了个好东西/article/4763197.html里介绍了一个pageadapter,它能够处理页面的每个生命周期,再看了作者写的代码,然后在VS里一找发现这个东西的老祖宗是controladapter,也就是说它能对控件都有效果。那这事就超级简单了。
1.写一个类继承pageadapter,重写page_load事件处理第一次访问页面时的记录收集
public class UBAPageAdapter : System.Web.UI.Adapters.PageAdapter { protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (!Page.IsPostBack) { //处理第一页面打开 if (Page.User.Identity != null) { string username = this.Page.User.Identity.Name.ToUpper().Replace("DOMAIN\\", ""); string title = this.Page.Title; try { if ( title.Length > 20) { title = title.Substring(0, 20); } UBAHelper.RecordOperateLog(username, OperateType.Page, title); } catch (Exception ex) { WebLogManager.Log(LogOperation_OpType.System, "UBA系统访问异常"); } } } } }
这里UBAHelper是我们UBA系统信息收集类,WebLogManager是log4net针对我们网站的一个帮助类,在这里就不说了。
2.写一个类继承ControlAdapter处理Button按钮事件,这个按钮事件处理起来有点技巧等下看代码就知道了
public class UbaButtonAdapter : ControlAdapter { protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.Control.Page.IsPostBack) { if (Page.User.Identity != null) { string username = this.Page.User.Identity.Name.ToUpper().Replace("DOMAIN\\", ""); Button btn = this.Control as Button; btn.Click += delegate(object sender, EventArgs ev) { string btntext = btn.Text; string btnid = btn.ID; try { string str = string.Format("显示文本:{0},ID:{1}", btntext, btnid); if (str.Length > 20) { str = str.Substring(0, 20); } UBAHelper.RecordOperateLog(username, OperateType.Button, str); } catch (Exception ex) { WebLogManager.Log(LogOperation_OpType.System, "UBA系统访问异常"); } }; } } } }
这里为了收集按钮事件,就采用了事件注册机制btn.Click += delegate(object sender, EventArgs ev){...}这样只要这个按钮被触发,那这个事件也被触发。
写完这两个就是把这两个类加到App_Browsers\xxx.browser文件里就完了
<browsers> <browser refID="Default"> <controlAdapters> <adapter controlType="xxxx.Web.BasePage" adapterType="xxxx.Web.UBAPageAdapter,xxxx.Web" /> <adapter controlType="System.Web.UI.WebControls.Button" adapterType="xxxx.Web.UbaButtonAdapter,xxxx.Web" /> </controlAdapters> </browser> </browsers>
一个是记录全网站的所有继承BasePage的页面行为,一个是记录全网站的Button的行为,登录记录信息我是写在session_start里,如还需记录其它信息,随便改改也应该不难。
相关文章推荐
- 网站退出登录防止通过返回按钮回到历史页面
- 网站退出登录防止通过返回按钮回到历史页面
- 如何测试一个网站登录页面
- [转] HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面
- 基于bootstrap(H+)的MVC网站开发之一登录页面
- C#网站登录学习笔记(二):访问需登录后才能访问的页面
- 制作login.jsp页面,要求实现提供用户登陆的界面, 用户通过该界面输入用户名(控件名userName)和密码(控件名password), 然后点击“登录”按钮实现登陆操作.
- 您不具备查看该目录或页面的权限,因为访问控制列表(ACL)对Web 服务器上的该资源进行了配置或者访问网站时出现登录对话框。
- 禁用页面缓存。目的:用户登录后退出。点击浏览器后退按钮造成的问题
- 自定义Sharepoint网站Form身份验证时的登录页面
- wordpress网站搬家后后台登录页面404文章页404分类页404
- 利用ajax在index页面自动执行方法并显示相关内容,在执行相关按钮操作(如登录注册)后返回index页面后ajax不执行,无法显示相关内容的问题解决方法之一
- 固定时间无操作跳转(网站跳转到登录页面)
- HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面
- C#网站登录学习笔记(二):访问需登录后才能访问的页面
- 今天接过来一个网站,想登录管理页面,不过密码是一串“f6f22515b3cebb8e759640cd7d2f74ac”登录不进,MD5加密的,那要怎么登录??
- struts2 之配置拦截器使网站页面在session失效后退回到登录页面
- 如何设计网站的登录注册页面
- python爬虫实战,多线程爬取京东jd html页面:无需登录的网站的爬虫实战 推荐
- 解决:在点击用户退出登录时,再按浏览器的后退按钮,仍然能够看到之前的页面