网站页面、按钮、登录信息统计

    最后公司搞了个UBA(用户行为分析)系统,就是想把公司里所有用到的网站的页面、按钮、登录等信息全部收集到了一起,然后进行分析统计。刚好我做的一个网站项目一期已经完工,现在也要弄这东西,看公司以前几个ASP.NET网站做的收集处理,就是在每个页面的PAGELOAD和按钮事件里面都加一行收集代码。我一想几十个页面都要加这个,并且每个事件里面还得加,这真麻烦。

      我在想有没有一个好办法,能统一在页面和按钮的某个生命周期上加个事件,或监听每个页面和按钮被访问。本着自己想到的事,可以别人已经做好了的思想去网上转了下,HTTPMODEL、HTTPHANDLE都仔细考虑下,发现有点难。最后无意发现了个好东西http://www.cnblogs.com/fish-li/archive/2012/06/10/2544087.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里,如还需记录其它信息,随便改改也应该不难。

 

转载于:https://www.cnblogs.com/lee5945/p/3502451.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值