您的位置:首页 > 运维架构 > 网站架构

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

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

我在想有没有一个好办法,能统一在页面和按钮的某个生命周期上加个事件,或监听每个页面和按钮被访问。本着自己想到的事,可以别人已经做好了的思想去网上转了下,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里,如还需记录其它信息,随便改改也应该不难。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐