用ASP統計使用者在網站的停留時間(2)
來源:互聯網
上載者:User
然後你就可以用任何方式來使用這些資料了。你可以建立ASP頁面來讀取資料並將資料呈現給管理員,或者從資料庫中將其複製到一個電子工作表中,有時間的時候再進行分析。
但是要記住,使用ASP sessions會帶來一些問題。在ASP 2.0中,當主應用程式目錄下的嵌套目錄中有global.asa 的副本時,有時sessions 會丟失。還有,如果你在URL、分頁檔名以及頁面之間的超級連結中使用字母的大小寫不同的話,象Navigator那樣的瀏覽器就把URL作為大小寫敏感來對待,因此不把特殊的ASP session cookie發送回來,這樣這種
方法的使用也是不可靠的。
“客戶機端Cookie”技術
使用客戶機端Cookie也很容易。完成這一工作的代碼可以放在一個ASP #include 檔案中,然後將它插入到網站中使用者肯定會去訪問的首頁面中。當然,如果願意的話可以將其插入所有的頁面。只要在使用者訪問的過程中它工作正常,就能給出正確的結果。
設定了路徑和記錄檔名之後,代碼定義一個子程式,將一個值附加到記錄檔的,就象前面的“ASP Sessions”的例子一樣。如果你願意的話,可以取代我們使用的代碼來更新一個資料庫表而不是一個記錄檔。
< %
'measure visit length with cookie
'set path and name of log file to be created
'edit to suit your own machine directory layout
'remember to give the directory Write or Full
'Control permission for the IUSR_machine account
strFileName = "C:Tempvisit_lengths.txt"
Sub UpdateLogFile(intVisitLength)
On Error Resume Next
If intVisitLength > 0 Then
'got a valid time so enter it into a log file
strInfo = "Session ending at " & Now() _
& " lasted for " & CStr(intVisitLength) & " minute(s)."
'add user name to the log entry string here if required
'strInfo = strInfo & " User name: " & strUserName
Set objFileObject = Server.CreateObject("Scripting.FileSystemObject")
'open text file to append data (the ForAppending constant = 8)
Set objFile = objFileObject.OpenTextFile(strFileName, 8, True)
objFile.WriteLine strInfo
objFile.Close
Set objFile = Nothing
Set objFileObject = Nothing
End If
End Sub
讀一個存在的Cookie
現在我們可以進行實質性的工作了。代碼的其餘部分檢查是否有一個現存的Cookie供這個使用者使用,如果有的話就確認它包含有效日期和時間(我們檢查它必須是一個1990年之後的日期)。如果cookie是有效,它隨後檢查自從這個使用者裝載最後一頁(也就是他們執行這個代碼的最後一次)是否已經過了30分鐘以上。如果已經超過了30分鐘,我們就把它算做一個新的訪問,你可以根據你的網站和需求來修改這個值。
...
'get session start time from existing cookie if it exists
datStart = CDate(Request.Cookies("SiteVisits")("StartTime"))
If Year(datStart) > 1990 Then
'cookie already exists, so get values
datLast = CDate(Request.Cookies("SiteVisits")("LastTime"))
If (DateDiff("n", datLast, Now()) > 30) Then
'more than 30 minutes since last visit so count as new visit
'get length of last visit and update log file
intMinutes = DateDiff("n", datStart, datLast)
UpdateLogFile intMinutes
...
這時,通過在頁面的頂端執行UpdateLogFile子程式,我們已經儲存了他們上一次訪問的長度, 這是他們上次訪問的分鐘數。然後就可以把我們收集的兩個值更新成當前的日期和時間,可以開始記錄這次訪問的長度了。
要注意,30分鐘過去之後才能看到表格中的任何條目。在實驗時,你可以用一個較短的值來修改代碼。
記錄訪問的時間長度
...
'update values for cookie
'use new start time and new 'last page load' time
datStart = Now()
datLast = Now()
Else
...
如果自從最後一次執行這個代碼的時間少於30分鐘,我們把它算成是當前訪問的一部分,因此我們只需要更新cookie中的值作為他們上次訪問的時間:
...
'less than 30 minutes since last visit so count as the same visit
'update values for cookie - just change the 'last page load' time
datLast = Now()
End If
Else
...
設定預設值
這裡的代碼只是在我們沒有從訪問者那裡得到一個有效cookie時才會執行,因此我們所能做的就是使用一個當前日期和時間的新cookie來得到最後一次訪問的開始和最後的數值:
...
'valid cookie does not exist so set values for a new one
datStart = Now()
datLast = Now()
End If
...
建立返回Cookie值
現在,我們已經涉及到了cookie中現存值的所有可能的情況,並且我們把新的cookie值儲存在datStart和datLast變數中。這樣我們就可以建立發送回這個訪問者的cookie了。注意,每次我們都要重新建立整個cookie,因為當試圖修改其中一個值而更新cookie時,會破壞其它的所有現存值:
...
'create cookie to send back to client
'have to recreate whole cookie - can't just change some values
Response.Cookies("SiteVisits")("StartTime") = datStart
Response.Cookies("SiteVisits")("LastTime") = datLast
Response.Cookies("SiteVisits").path = "/" 'apply to entire site
'make it stay on the user's system for three months
Response.Cookies("SiteVisits").expires = DateAdd("m", 3, Now)
% >
cookie技術的一個問題是當訪問者重新回到你的網站時,你只能測量他上次訪問的長度。為此,我們允許cookie在他們的機器上存在3個月,你可以修改這個時間值來適應你的需求。