欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在ASP应用中验证用户身份(2)

程序员文章站 2023-01-23 22:50:12
二、初始化以及用户输入合法性检查    当一个asp应用启动的时候,iis就会寻找一个global.asa文件。如果该文件存在,就开始执行application_onstart。在...
二、初始化以及用户输入合法性检查

   当一个asp应用启动的时候,iis就会寻找一个global.asa文件。如果该文件存
在,就开始执行application_onstart。在这里可以初始化应用级的变量和常量。下
面的代码在application_onstart中初始化一个数组来跟踪任意时刻登录的所有
用户:

sub application_onstart
application("users") = array()
end sub

   在执行application_onstart之后,asp引擎创建一个session对象并初始化
sessionid,然后触发session_onstart事件。在这里可以初始化会话级(和特定用
户相关的)变量和常量:

sub session_onstart
session.timeout=1
dsn
session("connectionstring") = "aspsecurity"
session("connectiontimeout") = 15
读/写方式
session("mode") = 3
end sub

   考虑到用户的可能不支持cookies或关闭了cookies功能,因此必须在第
一个asp页面中检查cookies的支持情况并把结果保存在一个session变量中。此外,
当用户在登录页面中单击“登录”按钮,还应该检查用户输入的合法性,如下面的代
码所示,其中aspsecurity.inc提供一些公用函数(如signuseron用于验证用户身
份):

< %@ language=vbscript %>
< % option explicit %>
< % response.buffer = true %>
< !-- #include file="aspsecurity.inc" -->
< %
dim asignon
dim apassword
dim datavalidated
datavalidated = false
检查浏览器是否支持cookies
session("supportscookies") = (instr(1, request.servervariables
("http_cookie"), "aspsessionid", vbtextcompare) > 0)
if request("action") = "登录" then
asignon = lcase(trim(request.form("signon")))
apassword = lcase(trim(request.form("password")))
if len(asignon) = 0 then
session("msg") = "请输入用户名字."
end if
if len(apassword) = 0 then
session("msg") = "请输入密码."
else
datavalidated=true
end if
if datavalidated then
if signuseron(asignon, apassword) then
用户身份被证实,允许进入受保护页面
response.redirect "signedon.?id=" & session("id")
end if
end if
elseif request("action") = "注册" then
response.redirect "register.asp"
end if
%>


   对于注册页面,除了要检查用户是否完整地输入所有内容之外,还应该检查两次
输入密码是否相同、用户名字是否与数据库中已有记录冲突等。实现代码请参见本文
所附的zip文件。

   由于用户每次启动浏览器连接到服务器时sessionid都是不同的,所以不能直接
用它来关联用户与存储在数据库中的相关信息,但sessionid可以用来临时地标识从
数据库或文件提取的用户信息。对于那些不支持cookies的浏览器,可以用另外的方
法来创建唯一id,如下面的getid使用的是随机函数:

function getid() dim numbers
dim letters
dim i
dim id
randomize
numbers="0123456789"
letters = "abcdefghijklmnopqrstuvwxyz"
for i = 1 to 10
if i mod 2 <> 0 then
id = id & mid(letters, int((26 * rnd) + 1),1)
else
id = id & mid(numbers, int((10 * rnd) + 1),1)
end if
next
getid = id
end function