為簡單計,本文只討論在伺服器端的使用者身分識別驗證。登入頁面是通過調用
ASPSecurity.inc中的signUserOn函數驗證使用者身份的。signUserOn檢查資料庫中
是否存在和使用者輸入的名字、密碼匹配的記錄:
function signUserOn(aSignon, aPassword)
dim dict
' 使用者輸入的名字
aSignon = lcase(trim(aSignon))
' 使用者輸入的密碼
aPassword = lcase(trim(aPassword))
' 提取使用者記錄轉換成Dictionary對象
set dict = getUser(aSignon)
' dict對象是否包含了合法的使用者資訊
if isUser(dict) then
if not dict("Password") = aPassword then
signUserOn = false
Session("msg") = "密碼錯誤."
exit function
end if
' 更新最後訪問時間
call updateLastOn(aSignon)
' 用SessionID (或不支援Cookies時,ID)標識使用者記錄
if not Session("SupportsCookies") then
Session("ID") = getID()
dict.Add "SessionID", Session("ID")
else
dict.Add "SessionID", Session.SessionID
end if
' 記錄最後啟用時間
dict.add "LastActivity", now()
' 在Session中記錄目前使用者資訊
set Session("User") = dict
' 將目前使用者加入正在訪問使用者列表
call addUserToApplication(dict)
signUserOn = true
else
Session("msg") = "使用者名稱稱錯誤"
signUserOn = false
end if
end function
如果使用者輸入的名字和密碼與資料庫中的記錄匹配,signUserOn函數返回
True。此時,使用者被授權,Session("User")變數包含了一個Dictionary對象,其中
含有該使用者的資料庫記錄的欄位名稱和值。另外,這裡還把Dictionary對象加入到
Application("User")數組,這是為了便於獲得當前正在訪問安全網站的使用者清
單。 signUserOn用到了ASPSecurity.inc中的許多子過程。由於大多數子過程都很
相似,下面只討論其中的getUser。該函數先串連資料庫,然後提取對應的使用者記
錄,最後將記錄轉換為Dictionary對象並返回它,如下所示:
function getUser(aSignon)
dim conn
dim R
set conn = openConnection()
set R = conn.Execute("SELECT * FROM Users WHERE Users.Signon='" &
aSignon & "'")
if err.number < > 0 then
' 輸出錯誤資訊
......
response.end
end if
if not R.EOF then
set getUser = recordToDictionary(R)
else
set getUser = nothing
end if
R.Close
set R = nothing
conn.close
set conn = nothing
end function