記錄用戶在網站上的逗留時間
我們總是對網站的流量很關心,但網站的流量多少并不能說明你的網頁具有多少吸引力。能更準確地說明你的網站吸引力的,是用戶在你的網站上逗留的時間。這篇文章中的思路就是想實現這個功能,而且它還可以讓你知道當前有多少用戶在線。
為了實現這個功能,首先一個網站要有“登陸框”。你需要一個數據庫(記錄用戶和他們登陸與注銷的時間),需要global.asa文件(這樣你可以在當Session.Abandon發生或者Session.Timeout終止時使用Session_OnEnd事件追蹤時間。這個時間是當用戶擊中“注銷”或者退出你的程序時的時間)。
數據庫
數據庫采用
MS Aclearcase/" target="_blank" >ccess 2000數據庫(mdb文件)。它包含有兩張表:Members
表和User_LogTimes表。在Members表里保留一些登陸信息如:
user name, Password, user first name和user last name。在User_LogTime
表中,保留了用戶登陸
/
注銷的時間的記錄,而且從這個表里我們可以知道網站上有多少個用戶在線。
數據庫的設計這里略去。
腳本
login.asp
當一個用戶在你的站點上登陸,login.asp
中的腳本首先被執行。
當用戶在登陸框中輸入用戶名和密碼,你需要創建一個查詢來從Members
表中得到用戶
ID
。這個值將被存儲在對話變量中:
´從登陸框中得到用戶名和密碼
UserName = Request.Form ("UserName")
Password = Request.Form ("Password")
...
...
set conn = Server.CreateObject ("ADODB.Connection")
conn.Open Application("connString")
query = "SELECT Id FROM Members WHERE UserName=´" &_ UserName & "´ AND Password=´" & Password &_ "´"
´ 從數據庫中得到用戶ID
set rs = conn.Execute (query)
...
...
´從Members表里在對話變量中設置用戶ID值
Session("member") = rs("Id")
在Session("member")變量中有了用戶ID后,現在我們必須在User_LogTime表中對這個把Offline字段設置為False(意思是他已經在線)的用戶的所有記錄進行修改,而且還要把那個字段設置為True。這樣改變的字段將不會有一個注銷時間。一般這個操作不會影響表里的任何記錄?!癘ffline”字段的記錄設置為False也許會存在當用戶沒有適當地關閉或用戶倉促地注銷的情況。
然后我們在User_LogTime
表里使用用戶
ID
(
user_id),用戶的
SessionID和用戶的登陸時間(login time)插入到一個新的記錄:
´從 User_LogTime中對應修改這個用戶的所有記錄
query = "UPDATE User_LogTime SET offline=True WHERE offline=False AND user_id="&_ session("member")
conn.Execute (query)
´在User_LogTime表中用user_id,SessionID和 login time插入新的記錄
query = "INSERT INTO User_LogTime (user_id, SID, Login_Time) "
query = query &_"VALUES (" & Session("member") & "," &_ Session.SessionID & ",#" & now() & "#)"
conn.Execute (query)
global.asa
當一個對話開始時上面的代碼被呼叫,你得到登陸時間,然后將它們寫進數據庫。
當用戶擊中“注銷”,然后Session.Abandon
被呼叫。如果用戶沒有點擊“注銷”就退出程序,那么在
session.Timeout
終止時,
Session_OnEnd
就會被執行。在這個過程中你會更新已經寫進
login.asp
的記錄,然后更新
Logout_time
,修改
offline
字段為
TRUE
。
Sub Session_OnEnd
set conn = Server.CreateObject ("ADODB.Connection")
conn.Open Application("connString")
´當用戶注銷時更新記錄,記下注銷時間,再設置用戶為Offline
query = "UPDATE User_LogTime SET Logout_Time=#" & now() & "#, offline=True "
query = query & "WHERE offline=False AND SID=" & Session.SessionID &_ " AND user_id=" & Session("member")
conn.Execute (query)
conn.Close
set conn = Nothing
End Sub
在線用戶
有了Offline字段就使這個問題變的容易了。你可以產生一個SQL查詢,像這樣:
query = "SELECT DISTINCT user_id FROM User_LogTime WHERE offline=False"
執行查詢,記錄里的數字將是你的在線用戶的數字。你可以有選擇地呼叫:
query = "SELECT COUNT(*) as NumOnline FROM User_LogTime WHERE offline=False"
用一個記錄返回一個記錄,字段(“NumOnline”)就是在線用戶的數量。
這樣,我們就完成了這個實例的模型,剩下的就是一些細枝末節的工作了。我們可以將它的功能擴展。但是要注意
在Win95/98上PWS 會工作的很好,但在IIS5上,記得Session_OnEnd
會通過
IWAM_machine
運行,而不是通過
IUSR
。所以在有登陸
/
注銷時間的數據庫中一定要設置寫
/
修改的權利。
記錄用戶在網站上的逗留時間
我們總是對網站的流量很關心,但網站的流量多少并不能說明你的網頁具有多少吸引力。能更準確地說明你的網站吸引力的,是用戶在你的網站上逗留的時間。這篇文章中的思路就是想實現這個功能,而且它還可以讓你知道當前有多少用戶在線。
為了實現這個功能,首先一個網站要有“登陸框”。你需要一個數據庫(記錄用戶和他們登陸與注銷的時間),需要global.asa文件(這樣你可以在當Session.Abandon發生或者Session.Timeout終止時使用Session_OnEnd事件追蹤時間。這個時間是當用戶擊中“注銷”或者退出你的程序時的時間)。
數據庫
數據庫采用
MS Access 2000數據庫(mdb文件)。它包含有兩張表:Members
表和User_LogTimes表。在Members表里保留一些登陸信息如:
user name, Password, user first name和user last name。在User_LogTime
表中,保留了用戶登陸
/
注銷的時間的記錄,而且從這個表里我們可以知道網站上有多少個用戶在線。
數據庫的設計這里略去。詳見下圖的設計:
腳本
login.asp
當一個用戶在你的站點上登陸,login.asp
中的腳本首先被執行。
當用戶在登陸框中輸入用戶名和密碼,你需要創建一個查詢來從Members
表中得到用戶
ID
。這個值將被存儲在對話變量中:
´從登陸框中得到用戶名和密碼
UserName = Request.Form ("UserName")
Password = Request.Form ("Password")
...
...
set conn = Server.CreateObject ("ADODB.Connection")
conn.Open Application("connString")
query = "SELECT Id FROM Members WHERE UserName=´" &_ UserName & "´ AND Password=´" & Password &_ "´"
´ 從數據庫中得到用戶ID
set rs = conn.Execute (query)
...
...
´從Members表里在對話變量中設置用戶ID值
Session("member") = rs("Id")
在Session("member")變量中有了用戶ID后,現在我們必須在User_LogTime表中對這個把Offline字段設置為False(意思是他已經在線)的用戶的所有記錄進行修改,而且還要把那個字段設置為True。這樣改變的字段將不會有一個注銷時間。一般這個操作不會影響表里的任何記錄?!癘ffline”字段的記錄設置為False也許會存在當用戶沒有適當地關閉或用戶倉促地注銷的情況。
然后我們在User_LogTime
表里使用用戶
ID
(
user_id),用戶的
SessionID和用戶的登陸時間(login time)插入到一個新的記錄:
´從 User_LogTime中對應修改這個用戶的所有記錄
query = "UPDATE User_LogTime SET offline=True WHERE offline=False AND user_id="&_ session("member")
conn.Execute (query)
´在User_LogTime表中用user_id,SessionID和 login time插入新的記錄
query = "INSERT INTO User_LogTime (user_id, SID, Login_Time) "
query = query &_"VALUES (" & Session("member") & "," &_ Session.SessionID & ",#" & now() & "#)"
conn.Execute (query)
global.asa
當一個對話開始時上面的代碼被呼叫,你得到登陸時間,然后將它們寫進數據庫。
當用戶擊中“注銷”,然后Session.Abandon
被呼叫。如果用戶沒有點擊“注銷”就退出程序,那么在
session.Timeout
終止時,
Session_OnEnd
就會被執行。在這個過程中你會更新已經寫進
login.asp
的記錄,然后更新
Logout_time
,修改
offline
字段為
TRUE
。
Sub Session_OnEnd
set conn = Server.CreateObject ("ADODB.Connection")
conn.Open Application("connString")
´當用戶注銷時更新記錄,記下注銷時間,再設置用戶為Offline
query = "UPDATE User_LogTime SET Logout_Time=#" & now() & "#, offline=True "
query = query & "WHERE offline=False AND SID=" & Session.SessionID &_ " AND user_id=" & Session("member")
conn.Execute (query)
conn.Close
set conn = Nothing
End Sub
在線用戶
有了Offline字段就使這個問題變的容易了。你可以產生一個SQL查詢,像這樣:
query = "SELECT DISTINCT user_id FROM User_LogTime WHERE offline=False"
執行查詢,記錄里的數字將是你的在線用戶的數字。你可以有選擇地呼叫:
query = "SELECT COUNT(*) as NumOnline FROM User_LogTime WHERE offline=False"
用一個記錄返回一個記錄,字段(“NumOnline”)就是在線用戶的數量。
這樣,我們就完成了這個實例的模型,剩下的就是一些細枝末節的工作了。我們可以將它的功能擴展。但是要注意
在Win95/98上PWS 會工作的很好,但在IIS5上,記得Session_OnEnd
會通過
IWAM_machine
運行,而不是通過
IUSR
。所以在有登陸
/
注銷時間的數據庫中一定要設置寫
/
修改的權利。
原文轉自:http://www.anti-gravitydesign.com