如何用ASP編寫(xiě)網(wǎng)站統(tǒng)計(jì)系統(tǒng)
如何用ASP編寫(xiě)網(wǎng)站統(tǒng)計(jì)系統(tǒng)
在目前的網(wǎng)站統(tǒng)計(jì)系統(tǒng)決大部分都是CGI的,但編寫(xiě)起來(lái)特別復(fù)雜,而ASP學(xué)起來(lái)簡(jiǎn)單,更有和數(shù)據(jù)庫(kù)結(jié)合的優(yōu)點(diǎn),所以結(jié)合自己曾經(jīng)做過(guò)的網(wǎng)站統(tǒng)計(jì)系統(tǒng),和大家探討一下ASP編寫(xiě)網(wǎng)站統(tǒng)計(jì)系統(tǒng)。
大家都看過(guò)中國(guó)站長(zhǎng)站CNZZ的網(wǎng)站統(tǒng)計(jì)系統(tǒng),它可以統(tǒng)計(jì)總訪問(wèn)量,每日平均訪問(wèn)量,當(dāng)日訪問(wèn)量,訪問(wèn)量,訪問(wèn)日期,日流量分析,月流量分析,周流量分析,瀏覽器分析,等等。
其實(shí)要做一個(gè)ASP的訪問(wèn)統(tǒng)計(jì)系統(tǒng)關(guān)鍵是系統(tǒng)表結(jié)構(gòu)的設(shè)計(jì)。以及如何來(lái)采集用戶(hù)的CGI變量,如何來(lái)顯示用戶(hù)的信息。也是說(shuō)系統(tǒng)的關(guān)鍵是兩個(gè)ASP程序,統(tǒng)計(jì)程序和顯示程序。
首先我們先看看如何來(lái)采集用戶(hù)的訪問(wèn)信息。
我們編寫(xiě)訪問(wèn)統(tǒng)計(jì)需要知道用戶(hù)的如下信息,訪問(wèn)者的IP(根據(jù)訪問(wèn)IP可以形成訪問(wèn)者IP列表),訪問(wèn)者的瀏覽器與操作系統(tǒng)(統(tǒng)計(jì)訪問(wèn)者的瀏覽器與操作系統(tǒng)及所有訪問(wèn)者瀏覽器與操作系統(tǒng)比例圖),訪問(wèn)者的訪問(wèn)時(shí)間(進(jìn)行日訪問(wèn)量分析,月訪問(wèn)量分析,周訪問(wèn)量分析),下面我們來(lái)看看用ASP的獲得以上信息的語(yǔ)句:
1、獲得訪問(wèn)者IP
Dim M_IPM_IP=Request.Servervariables("REMOTE_HOST")用上面的語(yǔ)句可以取得訪問(wèn)者的IP。
2、獲得瀏覽器信息
Dim O_Browser,M_BrowserTypeSet O_Browser=Server.Createobject("MSWC.BrowserType")M_BrowserType=O_Browser.Browser+O_Browser.Version
3、獲得訪問(wèn)時(shí)間
Dim M_DateTimeM_DateTime=Year(Date())&"/"&Right("0"&Month(Date()),2)&"/"Right("0"&Day(Date()),2)&"/"&Right("0"&Hour(Time()),2)&":"&Right("0"&Minute(Time()),2)&":"&Right("0"&Second(Time()),2)
4、取得用戶(hù)的操作系統(tǒng)。
在ASP中使用如下語(yǔ)句可以得到訪問(wèn)者的http_user_agent字符串。
Dim StrUserAgentStrUserAgent=Request.ServerVariables("HTTP_USER_AGENT")這個(gè)字符串一般是如下格式:
Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)上面的字符串可以說(shuō)明訪問(wèn)者使用的操作系統(tǒng)是Windows98,瀏覽器是MSIE 4.01,但是這個(gè)字符串格式不固定,而且可以自己更改。
平常我們所見(jiàn)的其它一些主要的UserAgent字符串如下:
使用IE的瀏覽器:
Mozilla/2.0 (compatible; MSIE 3.01; Windows 95)
Mozilla/4.0 (compatible; MSIE 4.0; Windows 95)
Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98)
Mozilla/4.0 (compatible; MSIE 5.0b2; Windows NT)
使用NetScape的瀏覽器:
Mozilla/4.03 〔en〕 (Win95; I)
Mozilla/4.08 〔en〕 (WinNT; U ;Nav)
Mozilla/4.5 〔en〕 (WinNT; U)
Mozilla/3.04Gold (Win95; I)
使用Opera的瀏覽器:
Mozilla/4.0 (compatible; Opera/3.0; Windows 95) 3.50b10
FrontPage編輯器:
Mozilla/2.0 (compatible; MS FrontPage 3.0)
使用Sun操作系統(tǒng):
Mozilla/3.01Gold (X11; I; SunOS 5.7 i86pc)
使用PowerPc的Mac機(jī):
Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC)
通過(guò)分析以上字符串,我們可以找出規(guī)律,編寫(xiě)一個(gè)子程序來(lái)判斷訪問(wèn)者用的是何種操作系統(tǒng),又由于用ASP中的判斷瀏覽器類(lèi)型的控件需要更新Browser.ini文件,所以我們可以結(jié)合這個(gè)字符串來(lái)判斷瀏覽器屬性。
1.我們以什么樣的方式來(lái)統(tǒng)計(jì)網(wǎng)站呢?
我們可以讓用戶(hù)在他的主頁(yè)上加入如下語(yǔ)句:
<a ><img src="http://www.abc.com/counter.asp?userid=username"></a>
上面的userid是具體哪一個(gè)用戶(hù),要注意用戶(hù)和訪問(wèn)者不是一個(gè)概念。
通過(guò)上面的字符串我們可以采集用戶(hù)的訪問(wèn)數(shù)據(jù),并給用戶(hù)提供觀看數(shù)據(jù)的鏈接。在我們看加有網(wǎng)易的統(tǒng)計(jì)系統(tǒng)的頁(yè)面時(shí)會(huì)發(fā)現(xiàn)它會(huì)返回給用戶(hù)一個(gè)圖標(biāo),我們可以在counter.asp中實(shí)現(xiàn)這個(gè)功能。
加入:
response.redirect http://www.abc.com/abc.gif這個(gè)語(yǔ)句我們可以加在統(tǒng)計(jì)數(shù)據(jù)采集后返回給用戶(hù)。
2.如何設(shè)計(jì)數(shù)據(jù)表結(jié)構(gòu)?
設(shè)計(jì)表結(jié)構(gòu)是一項(xiàng)極其重要的工作,它的合理與否與程序的編制緊密相關(guān)。
一個(gè)網(wǎng)站統(tǒng)計(jì)系統(tǒng)應(yīng)該有一個(gè)用戶(hù)表,統(tǒng)計(jì)值表。
這個(gè)用戶(hù)表也是保留注冊(cè)用戶(hù)信息的表,統(tǒng)計(jì)值表是記錄用戶(hù)的每一項(xiàng)統(tǒng)計(jì)指標(biāo)值的表。在統(tǒng)計(jì)值的表中我們可以指定用戶(hù)的統(tǒng)計(jì)指標(biāo),我們可把每一個(gè)指標(biāo)用一個(gè)ID值來(lái)表示,這里我們簡(jiǎn)單舉例。
用戶(hù)表:
Table Name:regist_tableField typeusername C 用戶(hù)名password C 密碼regdate C 注冊(cè)時(shí)間值表:
Table Name:value_tableField typeusername c 用戶(hù)名id c 統(tǒng)計(jì)指標(biāo)IDvalue idatetime c 統(tǒng)計(jì)指標(biāo)的值Id列表:
Table Name:id_tableField typeid C 統(tǒng)計(jì)指標(biāo)IDidvalue C 統(tǒng)計(jì)指標(biāo)的說(shuō)明有了這三個(gè)表我們可以開(kāi)始做了。
如我們可以指定以下ID
id idvalue
101 總訪問(wèn)量
1 1日訪問(wèn)量
2 2日訪問(wèn)量
: :
: :
231 31日訪問(wèn)量
要想對(duì)用戶(hù)開(kāi)始統(tǒng)計(jì)我們必須得先讓用戶(hù)注冊(cè),用戶(hù)使用的流程如下:
填注冊(cè)表->初始用戶(hù)的value表(把對(duì)應(yīng)的ID加入)->把注冊(cè)信息反饋給用戶(hù)->用戶(hù)在自己的頁(yè)面上加入鏈接->開(kāi)始統(tǒng)計(jì)
能采集數(shù)據(jù)我們都能采到了,那么我們開(kāi)始編制ASP的統(tǒng)計(jì)頁(yè)面。
這一頁(yè)我們叫計(jì)數(shù)頁(yè),counter.asp
這段asp代碼我們需要讓它按如下的流程進(jìn)行采集數(shù)據(jù)并保存數(shù)據(jù)和更新數(shù)據(jù):
采集用戶(hù)名,判斷用戶(hù)名是否合法,采集訪問(wèn)者的信息,對(duì)信息進(jìn)行加工,進(jìn)行保存和更新數(shù)據(jù)庫(kù),返回logo圖標(biāo)。調(diào)用這個(gè)ASP用counter.asp?user=abc這個(gè)方式。
采集用戶(hù)名我們可以用Request對(duì)象的相應(yīng)方法取得,然后檢查用戶(hù)表判斷用戶(hù)是否合法,然后取信息,用我們上面講到的取得相應(yīng)信息的方法取得信息,然后進(jìn)行加工保存在數(shù)據(jù)表里,但最重要的是如何對(duì)數(shù)據(jù)進(jìn)行更新,如當(dāng)日每小時(shí)訪問(wèn)統(tǒng)計(jì)數(shù),當(dāng)天每小時(shí)統(tǒng)計(jì)數(shù)等,我們?nèi)绾螌?duì)每天的數(shù)據(jù)進(jìn)行更新是這個(gè)程式的要點(diǎn),我們可以采取幾種方式,如對(duì)每天的每個(gè)小時(shí)的記錄的更新我們采取在每天午夜12點(diǎn)更新,對(duì)每月的每的數(shù)據(jù)我們?cè)谠路萸袚Q的那進(jìn)行更新。
3.下面我講一下具體的流程,以月份統(tǒng)計(jì)舉例:
(1)得出上一次的統(tǒng)計(jì)的日期時(shí)間
(2)得出當(dāng)前的日期時(shí)間,當(dāng)前月份并轉(zhuǎn)化成相應(yīng)的ID
(3)判斷當(dāng)前月份與上一次月份是否相同,如果相同則給總數(shù)加1,當(dāng)前月的ID累加1,如不相同則清零所有月份ID,只給總數(shù)ID加1(4)根據(jù)月份統(tǒng)計(jì)我們可以做一下小時(shí)統(tǒng)計(jì),周統(tǒng)計(jì),天統(tǒng)計(jì)。
按如上的流程我們可以做統(tǒng)計(jì)頁(yè)了,要注意每個(gè)ID的分配要分類(lèi)明確代表的含義要明晰