一行代码实现各产品访问统计???[原创]
本文是实现了从邮箱访问产品的数据统计功能,我们都知道邮箱大部分都禁用了脚本,即使你在页面中写了,也不会执行,那怎么实现对产品的统计呢?比如你通过发邮件的方式推广产品,需要统计用户打开邮件点击链接访问自己产品的情况,怎么统计呢?
既然不能用脚本,那么只能链接到自己的服务器上去统计了,本文也是基于这个思路。如果你宣传的是多个产品,难道要在每个产品中都写一套这种统计功能吗?答案是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>这一句脚本即可实现统计。
谢谢阅读,欢迎一起交流~
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· “你见过凌晨四点的洛杉矶吗?”--《我们为什么要睡觉》
· 编程神器Trae:当我用上后,才知道自己的创造力被低估了多少
· C# 从零开始使用Layui.Wpf库开发WPF客户端
· C#/.NET/.NET Core技术前沿周刊 | 第 31 期(2025年3.17-3.23)
· 接口重试的7种常用方案!