📄 24-4.cfm.htm
字号:
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb_2312-80">
<META NAME="Generator" CONTENT="Microsoft Word 97">
<TITLE>例子应用程序:创建密码保护系统</TITLE>
</HEAD>
<BODY>
<B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">例子应用程序:创建密码保护系统</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">这一节演示如何使用ADO对你的站点进行密码保护。你将学习如何创建一个注册网页,新的访问者可以用它注册到你的站点上。你还将学习如何防止访问者看到他们没有访问权限的网页。</P>
<P ALIGN="JUSTIFY">为什么需要一个密码保护系统呢?你可以配置IIS,使用基本认证模式或WINDOWS NT Challenge/Response认证模式。使用两种中的任一种认证系统,通过改变对文件的权限,你可以强制用户在访问一个网页之前输入密码。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">注意</P>
</B><P ALIGN="JUSTIFY">要了解使用基本认证模式和WINDOWS NT Challenge/Response认证模式的更多内容,请参阅第20章的“使用权限检查组件”一节。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">但是,不论使用基本认证模式或WINDOWS NT Challenge/Response认证模式,都存在一个问题。这两种认证系统都是与WINDOWS NT安全体系想分离的。这意味着每当有新用户注册时,你都要手工添加用户。而且你不能容易地从ASP网页中访问和修改密码和用户名。</P>
<P ALIGN="JUSTIFY">如果你只是想通过密码来保护你自己的和其他管理员的特殊网页,IIS提供的两种认证系统都是可行的。但是,假如你想在用户提供了诸如电话号码或信用卡号码这样的信息后,自动为新用户进行注册。在这种情况下,你需要建立一个密码确认系统。</P>
<P ALIGN="JUSTIFY">在这一节,你将学习如何使用ADO建立一个密码确认系统。你需要建立如下的数据库表和两个文件:</P>
<P ALIGN="JUSTIFY"> </P>
<UL>
<P ALIGN="JUSTIFY"><LI>表webusers。用来保存注册信息。</LI></P>
<P ALIGN="JUSTIFY"><LI>注册网页。这个ASP网页包含一个注册表单。通过完成这个表单,一个新用户可以获得对你站点的访问。</LI></P>
<P ALIGN="JUSTIFY"><LI>密码包含文件。每一个需要密码保护的网页都要包含这个文件。</LI></P></UL>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">创建表</FONT>webusers</P>
</B><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">表webusers是一个包含三个字段的SQL Sever表。第一个字段保存用户名,第二个字段保存用户密码,第三个字段保存用户的电话号码。</P>
<P ALIGN="JUSTIFY">要创建这个表,从Microsoft SQL Sever程序组中启动ISQL/w。然后,在查询窗口中键入以下的文本并执行它:</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">CRETAT TABLE webusers (UserName VARCHAR(30),</P>
<P ALIGN="JUSTIFY"> UserPass VARCHAR(30),</P>
<P ALIGN="JUSTIFY"> UserPhone VARCHAR(30))</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">无论何时,当一个新访问者试图访问一个密码保护的网页时,将对这个表进行用户名和密码的查询。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">创建注册网页</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">注册网页使新访问者可以注册到你的站点上(见图24.4)。如果某个没有合法密码的访问者试图访问一个密码保护的网页,他(她)将被导向这个注册网页。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">图24.4 注册网页</P>
</B><P ALIGN="JUSTIFY"><IMG SRC="Image114.gif" tppabs="http://210.74.168.175/guide/asp/part24/Image114.gif" WIDTH=501 HEIGHT=373></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">注册网页用了一个选择结构。如果HTML form中的各个域没有都填入数据,就显示这个网页。否则,如果所有的域都填入了数据,将发生三件事情:</P>
<P ALIGN="JUSTIFY"> </P>
<UL>
<P ALIGN="JUSTIFY"><LI>首先,注册信息被插入到表webusers中。</LI></P>
<P ALIGN="JUSTIFY"><LI>第二,新的用户名和密码被分配给session变量UserName和UserPass。</LI></P>
<P ALIGN="JUSTIFY"><LI>最后,该用户被导向他原来所在的网页(如果原来的网页是未知的,则被导向主页)。</LI></P></UL>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">注册网页只要求用户输入很少的信息。但是,你可以很容易地扩展这个例子,询问用户任何你想知道的信息。例如,你可以要求用户在使用你的站点之前输入一个信用卡号码或地址。要做到这一点,只要在HTML form和表webusers中增加一个域即可。表24.4是注册网页的脚本。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">注意</P>
<P ALIGN="JUSTIFY">如果你在注册表单中要求输入象信用卡号码这样的重要信息,你应该使用加密管道层(SSL)对信息进行加密。要了解加密管道层的更多信息,请参阅第二章,“安装和使用Internet Information Sever”。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">表24.4 register.asp</P>
<P ALIGN="JUSTIFY"><%CONST HomePage="/default.asp"</P>
<P ALIGN="JUSTIFY">' Check If Registration Information Is IncompleteIF Request.Form("UserName")="" OR Request.Form("UserPass")=""[ccc]OR Request.Form("UserPhone")="" THEN%></P>
<P ALIGN="JUSTIFY"> <HTML> <HEAD><TITLE>Registration Page</TITLE></HEAD> <BODY BGCOLOR=#FFFFFF> <H2>Please complete all of the following information:</H2> <FORM METHOD="POST" ACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>"> <TABLE> <TR> <TD ALIGN=RIGHT>User Name:</TD> <TD><INPUT NAME="UserName" TYPE="TEXT"VALUE="<%=Request.FORM("UserName")%>"></TD> </TR><TR> <TD ALIGN=RIGHT>Password:</TD> <TD><INPUT NAME="UserPass" TYPE="PASSWORD"</P>
<P ALIGN="JUSTIFY"> VALUE="<%=Request.FORM("UserPass")%>"></TD> </TR><TR> <TD ALIGN=RIGHT>Phone Number:</TD> <TD><INPUT NAME="UserPhone" TYPE="TEXT" VALUE="<%=Request.FORM("UserPhone")%>"></TD> </TR><TR> <TD ALIGN=RIGHT COLSPAN=2> <INPUT TYPE="SUBMIT" VALUE="Continue"> </TD> </TR> </TABLE> </FORM> </BODY> </HTML><%ELSE</P>
<P ALIGN="JUSTIFY"> ' Ready Database Objects Set MyConn=Server.CreateObject("ADODB.Connection") MyConn.Open "FILEDSN=d:\Program Files\Common Files\ODBC\Data Sources\MyData.dsn"</P>
<P ALIGN="JUSTIFY"> ' Insert The Registration Information Into WebUsers MySQL="INSERT WebUsers (UserName,UserPass,UserPhone) VALUES (" MySQL=MySQL&"'"&Request.FORM("UserName")&"'" MySQL=MySQL&",'"&Request.FORM("UserPass")&"'" MySQL=MySQL&",'"&Request.FORM("UserPhone")&"')" MyConn.Execute MySQL MyConn.Close</P>
<P ALIGN="JUSTIFY"> ' Create Session Variables Session("UserName")=Request.FORM("UserName") Session("UserPass")=Request.FORM("UserPass")</P>
<P ALIGN="JUSTIFY"> ' Redirect The User To The Appropriate Page IF Session("GoBack")="" THEN Session("GoBack")=HomePage Response.Redirect Session("GoBack")END IF%></P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">创建密码包含文件</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">密码包含文件被包含在你想进行密码保护的每一个网页中。它检查session变量UserName和UserPass是否存在。如果不存在,就要求用户输入名字和密码(见图24.5)。然后到表webusers中查询输入的名字和密码。如果密码是非法的,用户将被重新导向注册网页。表24.5是包含文件的脚本。</P>
<P ALIGN="JUSTIFY"> </P>
<B><P ALIGN="JUSTIFY">图24.5 密码包含文件</P>
</B><P ALIGN="JUSTIFY"><IMG SRC="Image115.gif" tppabs="http://210.74.168.175/guide/asp/part24/Image115.gif" WIDTH=502 HEIGHT=372></P>
<P ALIGN="JUSTIFY">表24.5 pass.inc</P>
<P ALIGN="JUSTIFY"><%IF Session("UserName")="" OR Session("UserPass")="" THEN IF Request.FORM("UserName")="" OR Request.FORM("UserPass")="" THEN%><HTML><HEAD><TITLE>Enter Password</TITLE></HEAD><BODY><H2>To access this page, you must enter a password: </H2>If you are a new user, click<A HREF="register.asp"> here. </A><FORM METHOD="POST"ACTION="<%=Request.ServerVariables("SCRIPT_NAME")%>"><TABLE><TR><TD ALIGN=RIGHT>NAME</TD><TD><INPUT NAME="UserName" TYPE="TEXT"></TR><TR><TD ALIGN=RIGHT>PASSWORD</TD><TD><INPUT NAME="UserPass" TYPE="PASSWORD"></TD></TR><TR><TD ALIGN=RIGHT COLSPAN=2><INPUT TYPE="SUBMIT" VALUE="Continue"></TD></TR></TABLE></FORM></BODY></HTML><%Response.End ELSE' Ready Database Objects Set MyConn=Server.CreateObject("ADODB.Connection") MyConn.Open "FILEDSN=d:\Program Files\Common[ccc]Files\ODBC\Data Sources\MyData.dsn" ' Check The Password MySQL="SELECT UserName FROM WebUsers WHERE USERNAME='"&Request.FORM("UserName") MySQL=MySQL&"' AND USERPASS='"&Request.FORM("UserPass")&"'" SET RS=MyConn.Execute(MySQL)</P>
<P ALIGN="JUSTIFY"> ' If the password is bad, redirect to the Registration Page IF RS.EOF THEN RS.CLOSE Session("GoBack")=Request.ServerVariables("SCRIPT_NAME") Response.Redirect "register.asp" Response.END END IF RS.CLOSE END IFEND IF%></P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN"><P ALIGN="JUSTIFY">测试密码系统</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">要在你的站点上完成这个密码保护系统,你需要把文件pass.inc包含在每一个要进行密码保护的ASP网页中。(在标准的HTML网页中不能包含这个文件。)表24.6是应该简单的例子。</P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">表24.6 testpass.asp</P>
<P ALIGN="JUSTIFY"><!-- #INCLUDE VIRTUAL="pass.inc" --><HTML><HEAD><TITLE> Restricted </TITLE></HEAD><BODY>Only registered users can see this sentence!</BODY></HTML></P>
<P ALIGN="JUSTIFY"> </P>
<P ALIGN="JUSTIFY">这个ASP网页只对已经注册的用户显示。本节中,在测试这个网页时,你可以用Session.Aandon方法删除session变量。session变量UserName和UserPass被删除后,你必须重新输入密码才能访问一个密码保护的网页。</P>
<P ALIGN="JUSTIFY"> </P>
</FONT><B><FONT FACE="宋体" LANG="ZH-CN" SIZE=5><P ALIGN="JUSTIFY">总结</P>
</B></FONT><FONT FACE="宋体" LANG="ZH-CN" SIZE=3><P ALIGN="JUSTIFY">这一章探索了如何使用命令对象执行SQL存储过程。你学习了如何传送和得到输入参数,输出参数,和返回值。本章的第二节提供了使用ADO的两个例子应用程序。你学习了如何创建一个高级反馈网页,如何对站点进行密码保护。</P>
<P ALIGN="JUSTIFY">这一章是关于Active Sever Pages对象和组件的最后一章。在本书的下一部分,“使用Microsoft Visual studio”中,你将学习如何使用Visual Studio中的一些程序。这些程序使你能够容易地创建和扩展你的ASP网页。</P></FONT></BODY>
</HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -