zoukankan      html  css  js  c++  java
  • 访问来源记录

    关于网站访问来源跟踪问题,如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函数,如果省略掉访问来源地址有多个参数的时候,只会记录一个参数。

  • 相关阅读:
    微信小程序封装get、post请求
    自定义原生jsonp跨域请求
    cookie的使用以及cookie的跨域名获取
    split,splice,slice,substr,substring使用方法总结
    树莓派吃灰
    树莓派吃灰
    树莓派吃灰
    Modbus读取MF5700系列流量计
    .net mvc ajaxfileupload.js 上传文件
    根据字段名查找数据库中包含的所有表
  • 原文地址:https://www.cnblogs.com/lirenqing/p/1448767.html
Copyright © 2011-2022 走看看