为简单计,本文只讨论在服务器端的用户身份验证。登录页面是通过调用 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