=波波日志 > Asp.Net/C#/WCF > 如何实现网站访问来源统计 =
如何实现网站访问来源统计
本例子自实现了统计域名来源,未统计域名后的查询字符串。如搜索引擎查询后找到你站点的记录,查询字符串不在统计范围内。
流程就是先通过Request.ServerVariables("http_referer")【asp】或者Request.ServerVariables["http_referer"]/Request.UrlReferrer【asp.net】得到来源页面的url,然后写入数据库中。
数据库tb中的统计表ref
然后是更新数据库的存储过程
下面是c#的一个类,用来调用存储过程更新数据库表
asp就比较简单了,由于没有返回记录,所以使用连接对象的execute方法即可。
流程就是先通过Request.ServerVariables("http_referer")【asp】或者Request.ServerVariables["http_referer"]/Request.UrlReferrer【asp.net】得到来源页面的url,然后写入数据库中。
数据库tb中的统计表ref
+展开
-SQL
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[ref]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[ref]
GO
CREATE TABLE [dbo].[ref] (
[Host] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[click] [int] NOT NULL
) ON [PRIMARY]
GO
drop table [dbo].[ref]
GO
CREATE TABLE [dbo].[ref] (
[Host] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[click] [int] NOT NULL
) ON [PRIMARY]
GO
然后是更新数据库的存储过程
+展开
-SQL
CREATE PROCEDURE updateref
@host nvarchar(200)
as
declare @num int
select @num=count(*) from ref where host=@host
if @num=0 --没有此条主机记录则插入
insert into ref values(@host,1)
else--更新
update ref set click=click+1 where host=@host
GO
@host nvarchar(200)
as
declare @num int
select @num=count(*) from ref where host=@host
if @num=0 --没有此条主机记录则插入
insert into ref values(@host,1)
else--更新
update ref set click=click+1 where host=@host
GO
下面是c#的一个类,用来调用存储过程更新数据库表
+展开
-C#
using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
public class DBOP
{
/// <summary>
/// 更新来源统计
/// </summary>
/// <param name="cn">数据库连接对象</param>
public static void UpdateRef(SqlConnection cn)
{
//这里注意判断是有有来源页面
string refHost = HttpContext.Current.Request.UrlReferrer == null ? "" : HttpContext.Current.Request.UrlReferrer.Host.ToLower();
if (refHost != "" && refHost.IndexOf("code-design.cn") == -1)//如果是你自己的域名不用统计
{
if (refHost.StartsWith("www.")) refHost = refHost.Substring(4);//去掉www.
try
{
SqlCommand cm = new SqlCommand("updateref", cn);
cm.CommandType = CommandType.StoredProcedure;//设置为存储过程
cm.Parameters.Add(new SqlParameter("@host", SqlDbType.NVarChar, 200, refHost));//添加参数
cm.ExecuteNonQuery();//执行
}
catch { }
}
}
}
using System.Web;
using System.Data;
using System.Data.SqlClient;
public class DBOP
{
/// <summary>
/// 更新来源统计
/// </summary>
/// <param name="cn">数据库连接对象</param>
public static void UpdateRef(SqlConnection cn)
{
//这里注意判断是有有来源页面
string refHost = HttpContext.Current.Request.UrlReferrer == null ? "" : HttpContext.Current.Request.UrlReferrer.Host.ToLower();
if (refHost != "" && refHost.IndexOf("code-design.cn") == -1)//如果是你自己的域名不用统计
{
if (refHost.StartsWith("www.")) refHost = refHost.Substring(4);//去掉www.
try
{
SqlCommand cm = new SqlCommand("updateref", cn);
cm.CommandType = CommandType.StoredProcedure;//设置为存储过程
cm.Parameters.Add(new SqlParameter("@host", SqlDbType.NVarChar, 200, refHost));//添加参数
cm.ExecuteNonQuery();//执行
}
catch { }
}
}
}
asp就比较简单了,由于没有返回记录,所以使用连接对象的execute方法即可。
+展开
-VBScript
sub updateref
dim cn,refUrl,sindex,eindex
refUrl=Request.ServerVariables("http_referer")
if refUrl<>"" then
'正则获取主机部分
set reg=new RegExp
reg.pattern="https?://(www.)?([^/]+)"
set ms=reg.execute(url)
for each m in ms
refurl=m.submatches(1):exit for
next
set reg=nothing
if instr(refUrl,"code-design.cn")=0 then'不统计自己的站点
set cn=Server.CreateObject("ADOBD.Connection")
cn.open "driver={sqlserver};server=.;uid=sa;pwd=;database=db"'注意更新你的驱动
cn.execute "exec updateref '"&refUrl&"'"'==========
cn.close:set cn=nothing
end if
end if
end sub
dim cn,refUrl,sindex,eindex
refUrl=Request.ServerVariables("http_referer")
if refUrl<>"" then
'正则获取主机部分
set reg=new RegExp
reg.pattern="https?://(www.)?([^/]+)"
set ms=reg.execute(url)
for each m in ms
refurl=m.submatches(1):exit for
next
set reg=nothing
if instr(refUrl,"code-design.cn")=0 then'不统计自己的站点
set cn=Server.CreateObject("ADOBD.Connection")
cn.open "driver={sqlserver};server=.;uid=sa;pwd=;database=db"'注意更新你的驱动
cn.execute "exec updateref '"&refUrl&"'"'==========
cn.close:set cn=nothing
end if
end if
end sub
类别:Asp.Net/C#/WCF 作者:波波 日期:2009-07-21 【评论:0】
暂时没有评论!
发表留言
百度赞助
同类热门博文
- ·IE里Cookie跨域不能..
- ·去掉隐藏asp.net编译..
- ·解决asp.net验证视图..
- ·找不到System.Web.S..
- ·web服务因URL意外地..
- ·C#2.0中,SerialPor..
- ·用C#编写ActiveX控件..
- ·用C#编写ActiveX控件..
博格Tag
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(598)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(92)
- 其他(75)
- showbo日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(24)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
最新博文
- ·详解SqlConnection连..
- ·C#实现的html内容截..
- ·asp.net web.config..
- ·asp.net<%--注释--%..
- ·ASP.NET环境配置常见..
- ·asp.net防止图片盗链..
- ·Session.Abandon的使..
- ·asp中缓存cache技术..
随机博文
