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

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

  既然不能用脚本,那么只能链接到自己的服务器上去统计了,本文也是基于这个思路。如果你宣传的是多个产品,难道要在每个产品中都写一套这种统计功能吗?答案是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 @   Tony-Tse  阅读(622)  评论(1编辑  收藏  举报
编辑推荐:
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
阅读排行:
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!
点击右上角即可分享
微信分享提示