如何完整纪录站内所有网页点选次数
类别: ASP教程
大家看到这个标题应该蛮兴奋的吧,我终于可以拥有一份完整的站内流量统计了,没错,笔者今天就要带领大家将这个困难的
工作完成,我要在这里说明的是如果你想要作统计的网页数量非常庞大,那你就得在每一个网页的一开头将这个程序含入
(Include),不过我可以告诉你这是值得的,因为这一份流量统计表可以完整纪录整个月的流量统计,而不仅仅是今天和昨天
而已,我相信你一定很高兴听到我这么说吧!!!因为我也很高兴可以让大家不必藉由一些昂贵的流量统计程序就能做到类似
的效果,其实流量统计的方式有很多种,如果你只想针对某一个网页作统计,那么友缘故事的流量统计程序算是一个蛮不错的
小程序,简单又大方,如果你想对站内所有的网页作流量统计,但你只想纪录网页浏览总数,那你可以参考本站做法,使用
Response.Redirect(重新导向的方式来处理),重新导向的方式很简单,首先你必须在数据库建立一个索引字段(ID),然后还
有一个字段储存网页的超级链接地址(URL),再加上一个储存点选次数的字段Hits,接着利用一个重新导向的小程序
Redirect.asp将参数值传递出去Redirect.asp?ID=15,而Redirect.asp会将接收到的ID值到数据库进行比对,将比对到的资
料列其Hits字段值加一接着再导向到URL字段所储存的网址,这是一种比较简单的做法,不过前提是你必须将所有网页的资料
全部建进数据库,而今天要介绍的方法并不需要将所有网页的资料写入数据库,你只要将网页名称和日期字段建入数据库即
可。
数据库表格及字段名称定义如下:
HITS
网页 文字
1号 数字
2号 数字
3号 数字
4号 数字
5号 数字
6号 数字
7号 数字
8号 数字
9号 数字
10号 数字
11号 数字
12号 数字
13号 数字
14号 数字
15号 数字
16号 数字
17号 数字
18号 数字
19号 数字
20号 数字
21号 数字
22号 数字
23号 数字
24号 数字
25号 数字
26号 数字
27号 数字
28号 数字
29号 数字
30号 数字
31号 数字
档案包含有三个档案,一个是执行流量统计的Hits.asp,一个是纪录日志文件是否已经寄给
网站管理者的文字验证档案Mailed.txt,最后就是纪录流量统计的日志档案Hits.Log:程序流程部分如下如所示
我们现在就来看看Hits.asp
Hits.asp
<%\'指定数据库路径
Dim stats
stats = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/asp/state/stats.mdb")
& ";DefaultDir=" & Server.MapPath("/asp/state") & ";DriverId=25;FILE=MS
Access;MaxBufferSize=512;PageTimeout=5"%>
<html>
<head>
<title>流量统计表</title>
</head>
<body text="#000000" bgcolor="#FFFFFF">
<!-- #INCLUDE FILE="adovbs.inc" -->
<%
Dim todaysDate
\'将网页名称以Session变量取代
\'将目前日期传给todaysDate变量
session("Page")="1"
todaysDate = day(now())
\'********************************************
\' 如果今天是1号的话,就将纪录日志文件是否已经寄给网站
\'管理者的文字验证档案之内容读出,并传给Mailed变量
\'********************************************
if todaysDate = "1" then
Dim objFSO, objTextFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Do While Not objTextFile.AtEndOfStream
Mailed = objTextFile.ReadLine
Loop
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
\'如果日志文件还没寄出
If Mailed = "0" then
Dim objRec
Dim objConn
Dim txtSubject
\'建立数据库连结并开启数据库
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.Recordset")
objConn.Open stats
MySQL="Select * From Stats"
objRec.Open MySQL, objConn, adOpenKeyset, adLockReadOnly
\'呼叫Email子程序,将日志文件内容传给txtSubject变量
txtSubject = Email(objRec)
\' 呼叫LogFile子程序,将日志文件内容写入日志文件
LogFile(txtSubject)
\' 呼叫EmailTo子程序,将日志文件内容寄给网站管理者
EmailTo(txtSubject)
\' 呼叫dBaseClear子程序,将数据库内容全部归零
dBaseClear()
\'**************************************
\'Email子程序
\'**************************************
Function Email(objRec)
Dim strT
Dim total
Dim fldF
\'将总数归0
total = 0
intFields = objRec.Fields.Count - 1
While not ObjRec.Eof
For Each fld in ObjRec.Fields
If Not fld.Name="ID" Then
\'除了ID字段之外,将其它字段名称、字段值依序列出
\'fld.Name(字段名称),fld.Value(字段值)
\'并将月份加在字段名称和字段值之前然后传给strt变量
strT = strT & MonthName(month(date())) & " " & fld.Name &_
": " & fld.Value & VbCrLf
\'计算总点选次数,并传给Total变量
total = total + fld.Value
End if
Next
strT = VbCrLf & strT & VbCrLf
objRec.MoveNext
Wend
\'将strT变量经过适当的格式化再输出
strT = strT & VbCrLf & "总点选次数 " & MonthName(month(date())) &_
" " & year(now()) & ": " & total & VbCrLf & VbCrLf
Email = strT
End Function
\'***********************************
\' LOGFile子程序,将strT变量值写入日志文件
\'***********************************
Function LogFile(txtSubject)
Const ForAppending = 8
Dim strLogFileName
\'*********************************************
\' 定义日志文件路径,并以加入的模式开启文字文件
\'*********************************************
strLogFileName = "C:inetpubwwwrootaspstateHits.log"
Dim objLogFileFSO
\'建立档案存取组件
Set objLogFileFSO = CreateObject("Scripting.FileSystemObject")
Dim objLogFileTS
\'若日志文件存在则以附加模式开启
if objLogFileFSO.FileExists(strLogFileName) then
set objLogFileTS = objLogFileFSO.OpenTextFile(strLogFileName, ForAppending)
else
\'若日志文件不存在则建立日志文件
set objLogFileTS = objLogFileFSO.CreateTextFile(strLogFileName)
end if
\'将strT变量内容写入日志文件
objLogFileTS.Write txtSubject
Set objLogFileFSO = Nothing
Set objLogFileTS = Nothing
End Function
\'********************************************
\'EmailTo子程序,将日志文件内容寄给网站管理者
\'*********************************************
Function EmailTo(txtSubject)
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "pcnet.pc-net.com.tw"
\'*********************************************************
\'*********************************************************
JMail.Sender = "PC-NET服务器"
JMail.Subject = MonthName(month(date())) & " 统计表"
JMail.AddRecipient "Jackie@pcnet.pc-net.com.tw"
JMail.AddRecipient "pcnet@pcnet.pc-net.com.tw"
JMail.Body = txtSubject
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
\'************************************
\'
\'************************************
JMail.Execute
JMail.Close
Set JMail = Nothing
End Function
\'************************************
\' dBaseClear子程序,流量统计表寄出之后将数据库归零
\'************************************
Function dBaseClear()
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.RecordSet")
objConn.Open stats
MySQL="Select * From Stats"
objRec.Open MySQL, objConn, adOpenStatic, adLockOptimistic
While Not ObjRec.Eof
\'将数据库第2个字段到最后1个字段值全部归0
For I = 2 to 32
ObjRec.Fields(I)=0
Next
ObjRec.MoveNext
WEnd
\'清除与关闭数据库对象集合
objRec.Close
objConn.Close
Set objRec = Nothing
Set objConn = Nothing
End Function
\'信件寄出之后将Mailed.txt的内容设为1,代表信件已经寄出
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Mailed = "1"
objTextFile.WriteLine Mailed
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
End if
End If
\'如果是每个月的第二天,就将Mailed.txt的内容设为0
if todaysDate = "2" then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Mailed = "0"
objTextFile.WriteLine Mailed
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
end if
\'如果不是每个月的第一天,就将本网页当天的计数值加一
\'建立数据库连结并开启数据库
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.Recordset")
objConn.Open stats
\'找寻数据库中网页名称符合的资料列
MySQL="SELECT * FROM STATS WHERE Page=\'"&Session("Page")&"\'"
objRec.Open MySQL, objConn, adOpenStatic, adLockOptimistic
\'将当天点选次数加1
objRec(todaysDate+1).Value = objRec(todaysDate+1).Value + 1
objRec.Update
objRec.Close
objConn.Close
Set objRec = Nothing
Set objConn = Nothing
%>
</body>
</html>
程序部分笔者用了几个子程序希望大家比较好理解,寄出日志文件的Email组件是采用笔者之前介绍过的Jmail组件,相信大
家都蛮熟悉的,而网页名称笔者暂时是以1、2、3来表示,希望这个小程序对大家有所帮助,记得要把他加在每个网页里面
喔!!用Include的方式也可以。
工作完成,我要在这里说明的是如果你想要作统计的网页数量非常庞大,那你就得在每一个网页的一开头将这个程序含入
(Include),不过我可以告诉你这是值得的,因为这一份流量统计表可以完整纪录整个月的流量统计,而不仅仅是今天和昨天
而已,我相信你一定很高兴听到我这么说吧!!!因为我也很高兴可以让大家不必藉由一些昂贵的流量统计程序就能做到类似
的效果,其实流量统计的方式有很多种,如果你只想针对某一个网页作统计,那么友缘故事的流量统计程序算是一个蛮不错的
小程序,简单又大方,如果你想对站内所有的网页作流量统计,但你只想纪录网页浏览总数,那你可以参考本站做法,使用
Response.Redirect(重新导向的方式来处理),重新导向的方式很简单,首先你必须在数据库建立一个索引字段(ID),然后还
有一个字段储存网页的超级链接地址(URL),再加上一个储存点选次数的字段Hits,接着利用一个重新导向的小程序
Redirect.asp将参数值传递出去Redirect.asp?ID=15,而Redirect.asp会将接收到的ID值到数据库进行比对,将比对到的资
料列其Hits字段值加一接着再导向到URL字段所储存的网址,这是一种比较简单的做法,不过前提是你必须将所有网页的资料
全部建进数据库,而今天要介绍的方法并不需要将所有网页的资料写入数据库,你只要将网页名称和日期字段建入数据库即
可。
数据库表格及字段名称定义如下:
HITS
网页 文字
1号 数字
2号 数字
3号 数字
4号 数字
5号 数字
6号 数字
7号 数字
8号 数字
9号 数字
10号 数字
11号 数字
12号 数字
13号 数字
14号 数字
15号 数字
16号 数字
17号 数字
18号 数字
19号 数字
20号 数字
21号 数字
22号 数字
23号 数字
24号 数字
25号 数字
26号 数字
27号 数字
28号 数字
29号 数字
30号 数字
31号 数字
档案包含有三个档案,一个是执行流量统计的Hits.asp,一个是纪录日志文件是否已经寄给
网站管理者的文字验证档案Mailed.txt,最后就是纪录流量统计的日志档案Hits.Log:程序流程部分如下如所示
我们现在就来看看Hits.asp
Hits.asp
<%\'指定数据库路径
Dim stats
stats = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/asp/state/stats.mdb")
& ";DefaultDir=" & Server.MapPath("/asp/state") & ";DriverId=25;FILE=MS
Access;MaxBufferSize=512;PageTimeout=5"%>
<html>
<head>
<title>流量统计表</title>
</head>
<body text="#000000" bgcolor="#FFFFFF">
<!-- #INCLUDE FILE="adovbs.inc" -->
<%
Dim todaysDate
\'将网页名称以Session变量取代
\'将目前日期传给todaysDate变量
session("Page")="1"
todaysDate = day(now())
\'********************************************
\' 如果今天是1号的话,就将纪录日志文件是否已经寄给网站
\'管理者的文字验证档案之内容读出,并传给Mailed变量
\'********************************************
if todaysDate = "1" then
Dim objFSO, objTextFile
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Do While Not objTextFile.AtEndOfStream
Mailed = objTextFile.ReadLine
Loop
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
\'如果日志文件还没寄出
If Mailed = "0" then
Dim objRec
Dim objConn
Dim txtSubject
\'建立数据库连结并开启数据库
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.Recordset")
objConn.Open stats
MySQL="Select * From Stats"
objRec.Open MySQL, objConn, adOpenKeyset, adLockReadOnly
\'呼叫Email子程序,将日志文件内容传给txtSubject变量
txtSubject = Email(objRec)
\' 呼叫LogFile子程序,将日志文件内容写入日志文件
LogFile(txtSubject)
\' 呼叫EmailTo子程序,将日志文件内容寄给网站管理者
EmailTo(txtSubject)
\' 呼叫dBaseClear子程序,将数据库内容全部归零
dBaseClear()
\'**************************************
\'Email子程序
\'**************************************
Function Email(objRec)
Dim strT
Dim total
Dim fldF
\'将总数归0
total = 0
intFields = objRec.Fields.Count - 1
While not ObjRec.Eof
For Each fld in ObjRec.Fields
If Not fld.Name="ID" Then
\'除了ID字段之外,将其它字段名称、字段值依序列出
\'fld.Name(字段名称),fld.Value(字段值)
\'并将月份加在字段名称和字段值之前然后传给strt变量
strT = strT & MonthName(month(date())) & " " & fld.Name &_
": " & fld.Value & VbCrLf
\'计算总点选次数,并传给Total变量
total = total + fld.Value
End if
Next
strT = VbCrLf & strT & VbCrLf
objRec.MoveNext
Wend
\'将strT变量经过适当的格式化再输出
strT = strT & VbCrLf & "总点选次数 " & MonthName(month(date())) &_
" " & year(now()) & ": " & total & VbCrLf & VbCrLf
Email = strT
End Function
\'***********************************
\' LOGFile子程序,将strT变量值写入日志文件
\'***********************************
Function LogFile(txtSubject)
Const ForAppending = 8
Dim strLogFileName
\'*********************************************
\' 定义日志文件路径,并以加入的模式开启文字文件
\'*********************************************
strLogFileName = "C:inetpubwwwrootaspstateHits.log"
Dim objLogFileFSO
\'建立档案存取组件
Set objLogFileFSO = CreateObject("Scripting.FileSystemObject")
Dim objLogFileTS
\'若日志文件存在则以附加模式开启
if objLogFileFSO.FileExists(strLogFileName) then
set objLogFileTS = objLogFileFSO.OpenTextFile(strLogFileName, ForAppending)
else
\'若日志文件不存在则建立日志文件
set objLogFileTS = objLogFileFSO.CreateTextFile(strLogFileName)
end if
\'将strT变量内容写入日志文件
objLogFileTS.Write txtSubject
Set objLogFileFSO = Nothing
Set objLogFileTS = Nothing
End Function
\'********************************************
\'EmailTo子程序,将日志文件内容寄给网站管理者
\'*********************************************
Function EmailTo(txtSubject)
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "pcnet.pc-net.com.tw"
\'*********************************************************
\'*********************************************************
JMail.Sender = "PC-NET服务器"
JMail.Subject = MonthName(month(date())) & " 统计表"
JMail.AddRecipient "Jackie@pcnet.pc-net.com.tw"
JMail.AddRecipient "pcnet@pcnet.pc-net.com.tw"
JMail.Body = txtSubject
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
\'************************************
\'
\'************************************
JMail.Execute
JMail.Close
Set JMail = Nothing
End Function
\'************************************
\' dBaseClear子程序,流量统计表寄出之后将数据库归零
\'************************************
Function dBaseClear()
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.RecordSet")
objConn.Open stats
MySQL="Select * From Stats"
objRec.Open MySQL, objConn, adOpenStatic, adLockOptimistic
While Not ObjRec.Eof
\'将数据库第2个字段到最后1个字段值全部归0
For I = 2 to 32
ObjRec.Fields(I)=0
Next
ObjRec.MoveNext
WEnd
\'清除与关闭数据库对象集合
objRec.Close
objConn.Close
Set objRec = Nothing
Set objConn = Nothing
End Function
\'信件寄出之后将Mailed.txt的内容设为1,代表信件已经寄出
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Mailed = "1"
objTextFile.WriteLine Mailed
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
End if
End If
\'如果是每个月的第二天,就将Mailed.txt的内容设为0
if todaysDate = "2" then
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("C:inetpubwwwrootaspstate
Mailed.txt")
Mailed = "0"
objTextFile.WriteLine Mailed
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing
end if
\'如果不是每个月的第一天,就将本网页当天的计数值加一
\'建立数据库连结并开启数据库
Set objConn = Server.CreateObject ("ADODB.Connection")
Set objRec = Server.CreateObject ("ADODB.Recordset")
objConn.Open stats
\'找寻数据库中网页名称符合的资料列
MySQL="SELECT * FROM STATS WHERE Page=\'"&Session("Page")&"\'"
objRec.Open MySQL, objConn, adOpenStatic, adLockOptimistic
\'将当天点选次数加1
objRec(todaysDate+1).Value = objRec(todaysDate+1).Value + 1
objRec.Update
objRec.Close
objConn.Close
Set objRec = Nothing
Set objConn = Nothing
%>
</body>
</html>
程序部分笔者用了几个子程序希望大家比较好理解,寄出日志文件的Email组件是采用笔者之前介绍过的Jmail组件,相信大
家都蛮熟悉的,而网页名称笔者暂时是以1、2、3来表示,希望这个小程序对大家有所帮助,记得要把他加在每个网页里面
喔!!用Include的方式也可以。
- 上一篇: ASP与电子表格EXCEL的交互操作
- 下一篇: 可以查看源代码的ASP程序
-= 资 源 教 程 =-
文 章 搜 索