一行代码实现各产品访问统计???[原创]

  本文是实现了从邮箱访问产品的数据统计功能,我们都知道邮箱大部分都禁用了脚本,即使你在页面中写了,也不会执行,那怎么实现对产品的统计呢?比如你通过发邮件的方式推广产品,需要统计用户打开邮件点击链接访问自己产品的情况,怎么统计呢?

  既然不能用脚本,那么只能链接到自己的服务器上去统计了,本文也是基于这个思路。如果你宣传的是多个产品,难道要在每个产品中都写一套这种统计功能吗?答案是no,还有更好的方法。本文就是统一写了一套脚本和处理程序,其他产品只需要在要统计的页面底部加上这行脚本即可实现统计。

  废话不多说了,直接上代码。

  这是测试页面的代码,蓝色为引用的脚本,(其他需要统计的产品只需要引用这一句脚本)。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebTest.HandleUrlStat.Test" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head> <body> <form id="form1" runat="server"> <div> </div> </form> <script type="text/javascript" src="MailStat.ashx?app=aaa"></script> </body> </html>

   提交到MailStat.ashx,自动下载脚本,拼上参数,MailStat.ashx的代码如下:

string js = @"(function() {
var AccessLog = {
    request: function(applicationName,ajaxUrl) {

        var url = document.location.href;
        var arr = this.GetAllParam(url);
        var pname = arr['pname'];
        if (url.indexOf('from=sendermail') && pname != undefined) {
            var urlParam = 'app=' + applicationName +'&pname=' + pname;
            var url2 = ajaxUrl + '?' + urlParam;
            this._sendRequest(url2);
        }
    },
    _sendRequest: function(url) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        script.src = url;
        document.body.appendChild(script);
    },
    GetAllParam: function(url) {
        var rtn = new Object();
        if (url.indexOf('?') != -1) {
            var str = url.substring(url.indexOf('?') + 1, url.length);
            if (url.indexOf('&') != -1) {
                var params = str.split('&');
                for (i = 0; i < params.length; i++) {
                    rtn[params[i].split('=')[0]] = params[i].split('=')[1];
                }
            }
            else {
                rtn[str.split('=')[0]] = str.split('=')[1];
            }
        }
        return rtn;
    }
}
//记录日志
AccessLog.request('{applicationName}','{ajaxUrl}');
})();";
        string ajaxUrl = "StatHandler.ashx";
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/x-javascript";

            string app = context.Request["app"];

            js = js.Replace("{applicationName}", app ?? string.Empty).Replace("{ajaxUrl}", ajaxUrl ?? string.Empty); 
            context.Response.Write(js);
        }

 

  然后提交到StatHandler.ashx处理程序,根据参数回写到数据库,保存统计信息,StatHandler.ashx的代码如下:

public void ProcessRequest(HttpContext context)
        {

            context.Response.ContentType = "application/x-javascript";
            var source = context.Request["app"];
            var userName = context.Request["pname"];

//这里写回写到数据库的代码
//...
  
  
  
context.Response.Write("Update Success."); context.Response.End(); }

  

   后面的两个处理程序部署到一台公用的服务器上,其他需要统计的产品只需要引用<script type="text/javascript" src="MailStat.ashx?app=aaa"></script>这一句脚本即可实现统计。
  

  

       谢谢阅读,欢迎一起交流~

  

 

posted @ 2013-11-22 18:42  Tony-Tse  阅读(618)  评论(1编辑  收藏  举报