关于网站访问来源跟踪问题,如google、51.la和cnzz等网站都提供专业的流量统计工具,只需要在网站上放一段JavaScript脚本就可以,非常简单实用。最近有个项目需要记录登录用户的行为,看了几个流量统计网站,都没有提供这方面的支持。实在没有办法,看来只能自己来做了。

方案1

    查看HttpRequest类的属性,其中有个属性UrlReferrer可以获取有关客户端上次请求的 URL 的信息,这个也就是我们需要的访问来源信息了。只要在每个页面的Load事件中写入访问来源日志就可以了。缺点,每个页面都需要写事件代码。

方案2
    使用IHttpModule接口
    
    public class HttpModule : System.Web.IHttpModule
{

    public void Init(HttpApplication context)
    {
        //建立个委托让他执行下面的ReUrl_BeginRequest事件
        context.BeginRequest += new EventHandler(ReUrl_BeginRequest);
    }

    public void Dispose()
    {
    }
    private void ReUrl_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        HttpRequest request = context.Request;
        string user = context.User.Identity.Name;
      //记录日志,根据request.UrlReferrer获取访问来源
    }
}

IHttpModule需要在Web.config配置文件中配置后才可以启用(配置方法可以参考MSDN上的例子)。优点,这样的好处是不改变以前写的代码,可以随便拆离和修改。缺点,在使用的时候时候发现会将一些css和图片等信息的访问日志都记录下来了,这些是我们不需要的,需要使用对访问的url进行过滤,随着网站功能的扩展,需要过滤的信息也越来越多容易遗漏。


方案3
    使用JavaScript+IHttpHandler
首先写个HttpHandler来处理信息的记录。使用JavaScript/AJAX来处理信息的提交。

public class ReferrerHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        if (!SiteConfiguration.Debug)
        {

            string urlReferrer = context.Request.QueryString["referrer"];
            string requestUrl = context.Request.UrlReferrer.ToString();
            string userName = string.Empty;
            if (context.User != null)
            {
                userName = context.User.Identity.Name;
            }
            string ipAdress = context.Request.UserHostAddress;
           //访问来源日志记录

        }

    }
}

在需要记录的页面增加下面代码。

    <script type="text/javascript" src="Scripts/mainscript.js">
    </script>

技巧:可以将下面引用添加到母板中,只要继承该母板的页面都会记录。

最后剩下的就是mainscript.js脚本的编写了。

/// <mainscript.js/>

var referrer = document.referrer;
var xmlHttp;
function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}

function startRequest() {
    createXMLHttpRequest();
    var url = "/ReferrerHandler.ashx?referrer=" + encodeURIComponent(referrer);
    xmlHttp.open("GET", url, true);
    xmlHttp.send(null);
}
startRequest();

使用Ajax进行提交请求。需要注意encodeURIComponent函数,如果省略掉访问来源地址有多个参数的时候,只会记录一个参数。

posted on 2009-05-04 15:28  lirenqing  阅读(1175)  评论(0编辑  收藏  举报