还没上线测试的来路统计和关键字统计
/================== 来路和关键字统计==================
在项目A的A.aspx页面实现功能,代码如下:
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
string str=Request.QueryString["r"].ToString();
if(str=="")
str=null;
this.GetKeyAndWeb(str);
}
}
//搜索引擎特征
//begin
private string[][] _Enginers = new string[][] {
new string[]{"baidu","gb2312","wd"},
new string[]{"google","utf8","q"}, new string[]{"yahoo","utf8","p"},
new string[]{"sogou","gb2312","query"},
new string[]{"3721","gb2312","p"},
new string[]{"yisou","utf8","search"},
new string[]{"soso","gb2312","w"},
new string[]{"zhongsou","gb2312","w"},
new string[]{"live","utf8","q"},
new string[]{"tom","gb2312","word"},
new string[]{"163","gb2312","q"},
new string[]{"iask","gb2312","k"}, new string[]{"openfind","utf8","q"},
new string[]{"alltheweb","utf8","q"},
new string[]{"lycos","utf8","query"},
new string[]{"onseek","utf8","q"}
};
//end
//搜索引擎名称
//begin
private string _EngineName = "";
public string EngineName
{
get
{
return _EngineName;
}
}
//end
//搜索引擎编码
//begin
private string _Coding = "utf8";
public string Coding
{
get
{
return _Coding;
}
}
//end
//搜索引擎关键字查询参数名称
//begin
private string _RegexWord = "";
public string RegexWord
{
get
{
return _RegexWord;
}
}
//end
//建立搜索关键字正则表达式
//begin
private string _Regex = @"(";
public void EngineRegEx(string myString)
{
//提取地址里面的搜索引擎名
for (int i = 0, j = _Enginers.Length; i < j; i++)
{
if (myString.IndexOf(_Enginers[i][0])>-1)
{
_EngineName = _Enginers[i][0]; //搜索引擎的名称 如baidu,google
_Coding = _Enginers[i][1]; //编码方式 uft-8,gb2312
_RegexWord = _Enginers[i][2]; //参数 wd,u
_Regex += _EngineName + @"".+.*[?/&]" + _RegexWord + @"[=:])(?<key>[^&]*)";
break;
}
}
}
//end
//得到搜索引擎关键字
//begin
public string SearchKey(string myString)
{
EngineRegEx(myString.ToLower()); //调用上面的方法
if (_EngineName != "")
{
Regex myReg = new Regex(_Regex, RegexOptions.IgnoreCase);
Match matche = myReg.Match(myString);
myString = matche.Groups["key"].Value;
//去处表示为空格的+
myString = myString.Replace("+", " ");
if(_Coding=="gb2312") //如果是中文的 如百度 就用该种解码方式
{
myString=HttpUtility.UrlDecode(myString,Encoding.GetEncoding("gb2312"));
}
else //如 google 的解码方式
{
myString=HttpUtility.UrlDecode(myString,Encoding.GetEncoding("utf-8"));
}
}
return myString;
}
//end
//获取来路并提取关键字
public void GetKeyAndWeb(string str)
{
string keys="";
string address=str;
if(address!=null && _EngineName != "")
keys = this.SearchKey(address);
string dt=DateTime.Now.ToShortDateString();
//转换成搜素引擎的中文名字 便于查阅
string ChineseEngine="";
switch(_EngineName)
{
case "baidu":
ChineseEngine="百度";
break;
case "google":
ChineseEngine="谷歌";
break;
case "yahoo":
ChineseEngine="雅虎";
break;
case "sogou":
ChineseEngine="搜狗";
break;
case "3721":
ChineseEngine="3721";
break;
case "163":
ChineseEngine="网易";
break;
case "yisou":
ChineseEngine="易搜";
break;
case "soso":
ChineseEngine="搜搜";
break;
case "zhongsou":
ChineseEngine="中搜";
break;
default://其他不常用的 不用转换
ChineseEngine=_EngineName;
break;
}
//
//写入数据到数据库
if(Session["sign"]==null)
{
Session["sign"]="sign";
//下面的判断比较关键的
if(address!=null) //来路不为空
{
new CountsPageBiz().WebCount(address,dt);
if(keys!="") //关键字 防止来路是通过链接等来的
{
new CountsKeyBiz().KeyCount(keys, ChineseEngine, dt);
}
}
else
{
address="直接输入网址";
new CountsPageBiz().WebCount(address,dt);
}
}
}
在项目B的B.aspx 的页面文件引用A.aspx
< script id="tj"></script>
<script type="text/javascript">
var o=document.GetelementByID("tj");
o.src="/A/A.aspx?r="+document.referrer:
</script>
============================OK=============================
刚开始在A.aspx里面统计来路,结果怎么弄来路都是B.aspx!这个问题困扰了我好几天,解决问题的关键就在B.aspx引用A.aspx的时候, 原来是直接这样做的:<script type="text/javascript" src="/A/A.aspx"></script>.也想到了在这里传个参数(B.aspx的来路即 document.referrer)给A.aspx,但是这个参数无法统计来路。?!
我又想到在B.aspx.cs里面得到来路:address=Request.servervariables["Http_Referer"] ,然后这样写:<script type="text/javascript" src="/A/A.aspx?r=<%=%>"></script>,但是这样写比较麻烦,如果又很多页面需要统计,那 么每个页面都要这样写。!!
终于,俊的一个同学刚好也在做这个,问题终于解决了!
爽哉!轉
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现