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

    最后公司搞了个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里,如还需记录其它信息,随便改改也应该不难。

 

你可能感兴趣的:(网站)