用户名:  密码:
兄弟在线   

标题:asp.net实现真实IP站点统计

作者:agui005 来源:http://www.xdlmn.com 时间:2011-04-13

昨天在看统计的时候,总感觉统计不是很准确

于是乎自己在www.xdlmn.com兄弟联盟网网站上写了些代码

首先建立一个来访者的记录表

包括 id,ip,path,idate,addr

然后在页面中首次访问后记录来访者的ip,path(访问页面地址),idate(访问时间),addr(ip地址所在地)

写完挂上网站后,发现来访者多得不得了基本上是5秒中一个。

我的心啊,当时开心得不得了,这和那统计的相差也太多了,我都怀疑那统计是不是有问题了。

后来一想,是不是有什么程序自动后台访问的二而不是人通过浏览器访问的?

带着问题百度了一下,貌似有个什么蜘蛛网络机器人的。

于是再看了看资料,果然是有这么一回事。

这下又有问题了,怎么判断是自动浏览还是人浏览呢?

再次百度,果然有答案,百度真的强大啊。

于是我在原来的基础上增加了一个专门记录浏览器类型的browser字段,http_user_agent字符串

然后判断http_user_agent字段带有http的就跳过不记录

自此,就可以实现记录通过浏览器浏览的用户了。

附上代码

'---判断是否是蜘蛛浏览还是人浏览

dim agent as string
agent = System.Web.HttpContext.Current.Request.ServerVariables("HTTP_USER_AGENT")
if agent is nothing then
else
if ucase(agent) like "*HTTP*" or ucase(agent) like "*.COM*" or ucase(agent) like "*GOOGLE*" then
else
If Session("xd_count") is nothing Then
sql = "select xd_count from xddata"
System.Diagnostics.Debug.WriteLine(sql)
getsql(sql)
dr.Read()
ss = dr(0).ToString
dr.Close()
sql = "update xddata set xd_count=xd_count+1"
System.Diagnostics.Debug.WriteLine(sql)
execsql(sql)
ipfiles(agent)
Session("xd_count") = (ss + 1).ToString
End If
txt_xd_count.Text = Session("xd_count")
end if
'------------------------------------
end if

'------------------------------------记录IP访问信息
Private Function ipfiles(byval ss as string) As Boolean
Dim fip As String
Dim fpath As String
fpath = Request.Url.ToString()
fip = getIP()
Dim sql = "insert into ip_pathaddress(ip,path,idate,browser,addr) values('" & fip & "','" & fpath & "',now(),'"& replace(left(ss,200),"'","") &"','"& IpSearch.GetAddressWithIP(fip) &"')"
execsql(sql)
End Function
'-------------------------获取IP
Private Function getIP() As String
Dim strIPAddr As String
If Request.ServerVariables("HTTP_X_FORWARDED_FOR") = "" Or InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), "unknown") > 0 Then
strIPAddr = Request.ServerVariables("REMOTE_ADDR")
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ",") - 1)
ElseIf InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") > 0 Then
strIPAddr = Mid(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), 1, InStr(Request.ServerVariables("HTTP_X_FORWARDED_FOR"), ";") - 1)
Else
strIPAddr = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
End If
getIP = Trim(Mid(strIPAddr, 1, 30))
End Function



总点击 [3477]   评论  0 查看评论
上一篇:test
下一篇:绑定序号gridview datagrid c# vb 2003 2008
【关闭窗口】
您可能感兴趣的文章
我要评论
          
评论标题:   可以输入250
 
验证数字: 2 + 1 =
兄弟友情提示
· 请自觉遵守国家有关法律、法规,尊重网上道德。
· 兄弟在线坚决抵制不良言行,违者文责自负。
· 如果文章有版权或其他问题等,请联系我们,我们会尽快处理。
· 文章注名来自网络的旨在传播共享信息,不做其它用途;注名原创的本站支持原创,但不代表同意其观点。
· 兄弟在线拥有管理用户与其文章和评论的一切权利,并有权在网站内转载或引用。
兄弟在线
兄弟热门文章
兄弟推荐文章
兄弟站内搜索

兄弟感兴趣的文章
兄弟最新影视