一个能对访问者进行编号、记录访问次数、IP、时间的统计制作实例


一个能对访问者进行编号、记录访问次数、IP、时间的统计制作实例

我做了一个网站,www.zydn.net 当然啦,跟大家一样,也摆了个计数器在上面,每天看计数器都在不断的翻,心里很高兴,不过后来我又想,到底是谁看了我的网站啊?是新朋友还是老朋友啊?也不知他们来了多少次,我还想给他们都编上号,于是我申请了 免费统计,不过一连换了N个都不满意,唉,看来,只有自己动手才能丰衣足食了,说干就干,水平臭臭,还望高手笑话之于,不访指教。

我以ACCESS库为例子,其实用SQL SERVER库也只要改一下链接库的语句就得啦,
库结构如下

库文件名: CONT.ASP 本来是CONT.MDB但在建好后把扩展名改为了ASP,以防库被下载。
表名:tab


字段名 数据类型 说明

ID 自动编号 访客的编号
IP 文本 用于记录访客的IP
dat1 日期时间 用于记录访客最后访问的时间
dat 日期时间 用于记录访客第一次访问的时间

CS 数字,整型 用于记录访客访问次数

程序很简单,只有两个文件,dispcont.asp 用于显示统计结果,contpage.asp用于统计信息,

先看看CONTPAGE.ASP 是乍么统计的,代码如下:

<%
Set Conn=Server.CreateObject("ADODB.Connection")
Connstr="DBQ="+server.mappath("cont.asp")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Conn.Open connstr '*****以上语句用于连接库,cont.asp是库文件名。

keren=request.cookies("keren") '读取cookies,cookies的名为:“keren”,哈哈。。阿余的E文学的臭,只懂用拼音啦。
if keren="" then '判断cookees是不是空,如果是空,那么肯定是新朋友啦,否则是老朋友。

sql="SELECT * FROM tab where id=-1"
set rs=server.createobject("ADODB.Recordset")
rs.Open sql,conn, 1, 3
rs.addnew '如果是新访客的话,在库中新增一条记录。
rs("cs")=1 '记下访问次数为1
rs("ip")=request.servervariables("remote_addr") '记下IP,
rs("dat")=now '记下当前的日期时间,
rs("dat1")=date '记下当前的日期,以后用来做第一次访问的日期,
response.cookies("keren")=rs("id") '写入一个cookies,内容就和ID一样。
response.cookies("keren").expires=date+365 '设置cookies的有效日期从现在开始,365天,


else '以上是新朋友的处理办法,对老朋友怎么办呢?看下面的:
sql="SELECT * FROM tab where id="&keren '到库中去找出我们老朋友的记录
set rs=server.createobject("ADODB.Recordset")
rs.Open sql,conn, 1, 3
rs("cs")=rs("cs")+1 '好啦,找到啦,把访问次数加上1
rs("ip")=request.servervariables("remote_addr") '看看他的IP是多少了,记下来。
rs("dat")=now '记下现在的时间,也就是最后一次访问的时间,
response.cookies("keren")=rs("id") '再把cookies写进去,我不知这句是否多余,没有试。
response.cookies("keren").expires=date+365 '设置cookies过期时间,免得一年到了我就不认得他了。


end if

rs.update '该记的都记下了,更新库吧。
rs.close '关闭recordset对象。
set conn=nothing '释放conn,我还是认为connection要随开随关才对,放到SESSION中我认为最不可取。4



%>

好啦,记录就做好啦,有二十几行代码,很简单的一个小程序,但我想,高手肯定还有高招,有高招的朋友不忘了教教阿余,

程序写好了,怎么放到页面中呢?很简单,在首页上随便找个地方,加上这行代码:<img src="contpage.asp" width="0" height="0">就行了。




接下来就是把记录显示出来,这个能做得比阿余好的人多的是,不过还是来现个丑。
文件名:dispcont.asp , 请看代码:
<%
Set Conn=Server.CreateObject("ADODB.Connection")
Connstr="DBQ="+server.mappath("cont.asp")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Conn.Open connstr '*****以上语句用于连接库,cont.asp是库文件名。

page3=request("pag")
if page3="" then page3=session("contpag") '分页数,当前分页
if page3="" then page3="1"

pa=request("pa")
if pa="" then pa=session("contpa") '每页显示数
if pa="" then pa=15 '默认每页显示15条,可任意改
session("contpag")=page3
session("contpa")=pa
pages=pa '每页显示数量***************以上一段程序用于实现分页功能

SQL="SELECT * FROM tab order by -dat,-id"
dim rs
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,1
csi=0
cs1=0
cs100=0
csdat1=0
do while not rs.eof
csi=csi+rs("cs")
if rs("cs")=1 then cs1=cs1+1
if rs("cs")>=100 then cs100+1
if datevalue(rs("dat"))=date then
csdat1=csdat1+1
end if
rs.movenext
loop
ZS=RS.RECORDCOUNT
'*****************************************************8以下一段程序用于分页显示
%>

<head>
<title>卓越电脑统计</title>
</head>

<body style="font-size: 9pt" bgcolor="#D8EDF8">

共有<%Response.Write zs%>条记录,现在是第<%Response.Write page3%>页 每页显示:[<a href="dispcont.asp?pag=<%=page3%>&pa=15">15]条、[<a href="dispcont.asp?pag=<%=page3%>&pa=20">20]条、[<a href="dispcont.asp?pag=<%=page3%>&pa=30">30]条、[<a href="dispcont.asp?pag=<%=page3%>&pa=40">40]条
[<a href="dispcont.asp">刷新]
<div align="left">
<table border="0" cellpadding="0" style="font-size: 9pt">
<tr><td>页码</td><%page2=1
for i=1 to zs step pages
if page3=cstr(page2) then
%><td >[<%Response.Write page2%>]</td>
<% else %>
<td ><a href="dispcont.asp?pag=<%Response.Write page2%>">[<%Response.Write page2%>]</td>
<% end if
page2=page2+1
next
sn=pages*(page3-1) '当前记录号=每页显示数*页数-每页显示数
if sn>zs then sn=0
rs.move sn,1
'**********************************以上一段用于分页
%> </tr></table>
</div> <table style="font-size: 9pt" width="100%" bordercolorlight="#000000" border="1" bordercolordark="#FFFFFF" bgcolor="#A4D1E8" cellspacing="0" cellpadding="3">
<tr><td>编号</td><td>最后访问首页</td><td>最后访问IP</td><td>首页次数</td><td>首次访问日期</td></tr><%
for i=1 to pages
Response.Write "</tr>"
Response.Write "<td>"&rs("ID")&"</td>"
Response.Write "<td>"&rs("dat")&"</td>"
Response.Write "<td>"&rs("IP")&"</td>"
Response.Write "<td>"&rs("CS")&"</td>"

Response.Write "<td>"&rs("DAT1")&" </td>"
Response.Write "</tr>"
rs.movenext
if rs.eof then exit for
next
rs.close
%>
<tr><td>合计<%=zs%></td><td>访问次数为100次以上的有<%=cs100%> </td><td>访问次数为1的有:<%=cs1%></td><td>总访问次数<%=csi%></td><td>今天访问量:<%=csdat1%></td></tr>
</table>

'****************************以上是完整的分页显示全部复制下来就可用。没有考虑一条记录也没有的情况。

您可以稍加改动,加入更多功能,好啦,最后请大家关注阿余的网站: http://www.zydn.net
这里有这个小程序的演示,



相关阅读:
110个oracle常用函数总结(7)
ASP函数库6
非常酷的角BANNER
Oracle自增字段的创建
PHP采集腾讯微博的实现代码
fedora9.0 DVD正式版下载地址
JavaScript教程:基于对象的JS语言范例
WordPress实现相关文章功能代码方法
HTML标签及ASP函数速查表
CSS教程:导致一些问题的overflow
PHP安全配置详细说明
深入分析网页CSS隐藏文字和以图换字技术
在Windows server 2008下安装应用程序
VMware中Linux共享mysql数据库的方法
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 CMS SQL jQuery C# C++ java Android IOS oracle MongoDB PostgreSQL SQLite 交通频道 G4722 G1875 G215 G569 G421 G6733 G7577 G8906 G1235 G4916 G7291 G1953 G245 G662 G1570 G6285 G719 G1836 G1346 G4781 G4908 G289 G6781 G9290 G7358 G1928 G1815 G325 G132 G4901 G6012 G6290 G7131 G5367 G184 G151 G5303 G1136 G6481 G7028 G575 G1744 G7660 G7693 G2344 G4937 G1234 G1814 G6252 G1492 G253 G2926 G883 G9275 G1231 G556 G241 G1306 G7646 G8103 G600 G1858 G9678 G6160 G7156 G825 G1125 G7249 G1809 G1350 G432 G9466 G7067 G785 G6404 G4663 G7008 G150 G823 G1514 G7529 G1201 G2353 G205 G7629 G9409 G6147 G677 G390 G8016 G9239 G456 G828 G8045 G491 G7145 G397 G7012 G1021 G6482 G2322 G7264 G1301 G9247 G96 G1294 G7133 G4824 G7005 G1653 G5307 G1213 G822 G4837 G1422 G411 G6227 G1571 G359 G1882 G6074 G7678 G21 G7077 G1272 G8918 G9645 G461 G1254 G1846 G8021 G7303 G1104 G76 G82 G621 G218 G8533 G2341 G8543 G555 G8013 G4802 G1364 G1153 G1342 G1861 G8905 G590 G4780 G668 G9261 G1304 G1638 G1395 G2914 G8003 G7158 G1833 G1873 G8128 G1856 G1841 G8709 G7346 G4612 G2103 G835 G8712 G381 G7240 G8932 G507 G29 G4054 G6273 G6752 G426 G211 G9473 G7119 G2333 G1567 G6153 G360 G4011 G5301 G7648 G8010 G8015 G6706 G614 G423 G8557 G9465 G72 G6018 G8901 G7030 G123

丹东 云霄 辽中 德阳 克拉玛依 惠山 招远 昭通 铁岭西 延吉西 军粮城北 定西 晋中 许昌东 郫县 诏安 七台河 高碑店东 南昌 延安 敦化 铜陵北 嵩明 鲘门 扬中 龙里北 舟山 洛阳 运城北 鞍山 西昌 邵阳北 绍兴 白山 三明 肇东 陵水 衡山西 嘉善 宜都 泰兴 泉州 汉口 东胜西 昌图西 锦州南 安阳东 怀化 黄南 亚龙湾 扬州 温州 南翔北 福安 金山北 永川东 安达 曲阜东 郑州西 天门 绍兴北 涪陵北 阳泉北 三亚 葫芦岛北 徐州 阳江 辽源 新泰 阿坝 孝感北 三穗 金寨 保山 高安 安阳 牟平 西双版纳 信阳 繁昌西 哈尔滨北 达州 新余 沈阳南 四平 扶余北 伊宁 郴州西 济源 水家湖 民权北 福鼎 如皋 奉化 全州南 安庆 太姥山 武汉 乐清 皮口 武昌 茂名 邯郸 资阳 马鞍山 三水南 泰安 包头东 衡阳东 南丰 仙桃西 安吉 罗源 山海关 平湖 惠州 资阳北 淄博 丹阳 莱州 巴东 关岭 盐城 锦州 格尔木 益阳 大英东 吉林 湛江 临安 襄汾西 渑池南 当涂东 辽阳 徐水 贺州 韶关 光明城 邯郸东 普安县 南江口 铜川 五龙背东 张家港 烟台南 萍乡北 青堆 长乐 江门 台州 衡水 湘潭北 闽清北 高邑西 盖州西 石柱县 潮汕 肇庆 泰康 邵东 湖州 余姚 平凉 宜宾 增城 沧州 都匀 防城港 鹰潭北 海东西 福田 余姚北 岳池 广州北 南安 蓬莱 瓦房店西 李石寨 葛店南 海安 无锡东 上饶 通辽 四会 桂林西 砀山南 兰州 滨海 龙口 绅坊 莱西 石林西 深圳 大连北 成都 上海西 孝感 杏树屯 德清 嘉兴

Copyright © 2016 phpStudy |