本单元说明在 Active Server Pages (ASP) 中维护会话状态的过程。会话是指特定用户查看网站内容的时间段,从用户开始访问网站的第一个网页时开始,在用户离开网站若干分钟后结束。与特定会话相关的用户特定信息,统称为会话状态。
因为 HTTP 是非状态协议,这就产生一个问题,即应当如何维护用户访问网站的状态。Web 服务器将每一个 HTTP 请求都看作独立的请求,而与以前的请求无关。这样,用户在请求的下一个网页中自动获得在上一个网页中输入(例如通过表单)的信息。Web 服务器必须维护会话状态,以便在用户浏览网站上的多个网页时可以识别和跟踪用户。
一个解决方案是使用 cookie。cookie 记录用户在一个网页上的信息并将此信息传递给网站内的其他网页。然而,一些浏览器不识别 cookie,而在另外一些浏览器上,用户可能禁用 cookie。如果考虑到这些 Web 用户的需要,您可以通过 HTTP POST 而不是使用 cookie 来维护会话状态。
本单元包括下列课程:
cookie 存储一组用户特定的信息,比如信用卡号码或密码。Web 服务器将 cookie 嵌入到用户的 Web 浏览器中,以便用户信息也可用于网站的其他网页。因此,用户不必为访问的每一个网页重新输入信息。在为网上购物、保留 Web 用户个人首选项或维护用户状态而收集客户信息时,cookie 是一种有效的方法。
有两种类型的 cookie,如下所示:
如果创建 cookie 时不指定过期日期,则创建内存 cookie,并只在浏览器会话期间有效。下列语句是用于内存 cookie 的脚本:
Response.Cookies("SiteArea") = "TechNet"
如果需要在会话结束后仍保留 cookie 信息,应当通过指定过期日期创建永久 cookie。提供过期日期可以使浏览器将 cookie 保存在客户端计算机中。在到达 cookie 过期日期前,永久 cookie 中的数据会一直保留在客户端机器中。对原来网站的任何请求都会自动附加由此网站创建的 cookie。由于 cookie 数据中包含了网站名称和 ASP 文件的部分信息,所以 cookie 只对创建它们的网站有效。
下列语句是用于创建永久 cookie 的脚本:
Response.Cookies("SiteArea") = "TechNet"
Response.Cookies("SiteArea").Expires = "August 15, 2000"
应将创建 cookie 的脚本置于 ASP 文件的开始处,因为 cookie 需要在 HTML 文本发送到浏览器之前生成。
可以使用 Response 和 Request 对象生成永久 cookie,尽管这些对象也可以用于创建内存 cookie。大多数 Web 应用程序利用这些对象维护会话状态。
在本课中,将使用 Response 和 Request 对象创建下列文件。请一次创建全部文件,因为其中某些文件会需要另外一些文件。在创建所有文件后,通过在浏览器中键入 http://LocalHost/Tutorial/Frame.htm 运行此应用程序。
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\Frame.htm。
<html>
<head>
<title>使用内存和永久 cookie 自定义问候和颜色</title>
</head>
<frameset cols="40%,60%">
<frame src="menu.htm" name="left" marginheight="5" marginwidth="5">
<frame src="CustomGreeting.asp" name="right" marginheight="5" marginwidth="5">
</frameset>
<noframes>
抱歉,您的浏览器不支持框架。请转到<a href="menu.htm">菜单</a>。
</noframes>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\Menu.htm。
<html>
<head>
<title>使用 cookie 维护会话状态</title>
</head>
<body>
<font face="MS Gothic">
<h2 align="center">cookie 示例</h2>
<table align=center border=1 cellpadding=4>
<tr>
<td><a href="CustomGreeting.asp" target="right"><b>自定义问候网页</b></a></td>
</tr><tr>
<td><a href="DeleteGreetingCookie.asp" target="right"><b>删除问候 cookie</b></a></td>
</tr><tr>
<td><a href="SelectColors.asp" target="right"><b>设置网页颜色</b></a></td>
</tr><tr>
<td><a href="DeleteColorCookie.asp" target="right"><b>删除网页颜色 cookie</b></a></td>
</tr><tr>
<td><a href="Cookie.asp" target="right"><b>设置日期、时间和总访问次数的 cookie</b></a></td>
</tr><tr>
<td><a href="DeleteCookies.asp" target="right"><b>删除日期、时间和总访问次数的 cookie</b></a></td>
</tr>
</table>
</font>
</body>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\CustomGreeting.asp。
<%@ Language="VBScript" %>
<%
'如果用户已经选择了文字和背景颜色,
'cookie 用于在 HTTP 会话之间记录文字和背景颜色值。
'先执行此步骤以便网页可以使用这些值(如果已进行了设置)。
If Not (Request.QueryString("Text")="") Then
Response.Cookies("TextColor") = Request.QueryString("Text")
Response.Cookies("BackgroundColor") = Request.QueryString("Background")
End If
'如果用户已键入一个名字,则创建一个 cookie。
If Not (Request.QueryString("Name")="") Then
Response.Cookies ("Name") = Request.QueryString("Name")
'如果用户没有给出姓名,则创建一个 cookie
'以便以后不再询问姓名。
ElseIf (InStr(Request.QueryString,"Name")=1) Then
Response.Cookies ("NoUserInput") = "TRUE"
End If
%>
<html>
<head>
</head>
<%
'按当前上一位用户的输入信息设置颜色。
If (Request.Cookies ("TextColor")="") Then %>
<body>
<% Else %>
<body bgcolor=<%=Request.Cookies("BackgroundColor")%> text=<%=Request.Cookies("TextColor")%>>
<% End If
%>
<font face="MS Gothic">
<%
'在不存在姓名 cookie、用户未输入姓名,
'或根本没有用户输入时,获取用户姓名。
If ( (Request.Cookies("Name")="") And ((Request.QueryString("Name"))="")) And (Not(Request.Cookies("NoUserInput")="TRUE") ) Then %>
<FORM ACTION="CustomGreeting.asp" METHOD="GET" NAME="DataForm">
<table align=center><tr><td>
<INPUT TYPE=TEXTBOX NAME="Name" SIZE=33></td></tr><tr><td>
<INPUT TYPE=Submit VALUE="请输入您的姓名"></td></tr></table>
</FORM>
<% ElseIf Not(Request.Cookies("Name")="") Then %>
<H2 align=center>Greetings <%=Request.Cookies("Name")%></H2>
<% Else %>
<H2>您好!</H2>
<H3>您没有提供姓名,所以无法用您的名字问候您。</H3>
<% End If
%>
<H3>内存 cookie 示例</H3>
<P>
在您输入姓名之后:
<UL>
<LI>如果单击浏览器中的<B>刷新</B>,依然会看到您的名字。</LI>
<LI>如果关闭浏览器,此 cookie 将被删除。当使用浏览器重新打开此网页时,将要求您重新输入姓名。</LI>
<LI>如果单击<B>删除问候 cookie</B>,并单击<B>自定义问候网页</B>,会要求您重新输入姓名。</LI>
</P>
</font>
</body>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\DeleteGreetingCookie.asp。
<%@ Language="VBScript" %>
<html>
<head>
</head>
<% If (Request.Cookies ("TextColor")="") Then %>
<body>
<font face="MS Gothic">
<% Else %>
<body bgcolor=<%=Request.Cookies("BackgroundColor")%> text=<%=Request.Cookies("TextColor")%>>
<font face="MS Gothic" color=<%=Request.Cookies("TextColor")%>>
<% End If %>
<%
If Not ("" = Request.Cookies("Name")) Then
Response.Cookies ("Name").Expires = "January 1, 1992"
Response.Cookies ("NoUserInput").Expires = "January 1, 1992" %>
<h2 align=center>已删除内存 cookie </h2>
<P>
用于跟踪姓名的 cookie 已被删除。<BR>
请单击<B>自定义问候网页</B>再次输入姓名。
</P>
<% Else %>
<h2 align=center>未删除内存问候 cookie</h2>
<P>
不存在与您的姓名有关的 cookie。<BR>
请单击<B>自定义问候网页</B>输入您的姓名。
</P>
<% End If
%>
</font>
</body>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\SelectColors.asp。
<%@ Language="VBScript" %>
<%
'如果用户已经选择了文字和背景颜色,
'cookie 用于在 HTTP 会话之间记录文字和背景颜色值。
If Not (Request.QueryString("Text")="") Then
Response.Cookies ("TextColor") = Request.QueryString("Text")
Response.Cookies ("BackgroundColor") = Request.QueryString("Background")
End If
%>
<html>
<head>
</head>
<%
'按当前上一位用户输入的信息设置颜色。
If (Request.Cookies ("TextColor")="") Then %>
<body>
<% Else %>
<body bgcolor=<%=Request.Cookies("BackgroundColor")%> text=<%=Request.Cookies("TextColor")%>>
<% End If
%>
<font face="MS Gothic">
<H2 align=center>为网页选择颜色</H2>
<P>
将使用内存 cookie 保存这些值。
</P>
<FORM ACTION="SelectColors.asp" METHOD="GET" NAME="DataForm">
<table border="1" width="450" cellpadding=0>
<tr><td>
<table>
<tr><td BGCOLOR=99FF99>
<B><font color=000000>请选择背景颜色</font></B>
</td></tr><tr><td BGCOLOR=FFFFFF>
<input type="RADIO" NAME="Background" VALUE="FFFFFF" CHECKED><font COLOR=000000> FFFFFF </font>
</td></tr><tr><td BGCOLOR=D98719>
<input type="RADIO" NAME="Background" VALUE="D98719"> D98719
</td></tr><tr><td BGCOLOR=D9D919>
<input type="RADIO" NAME="Background" VALUE="D9D919"> D9D919
</td></tr><tr><td BGCOLOR=00FFFF>
<input type="RADIO" NAME="Background" VALUE="00FFFF"> 00FFFF
</td></tr><tr><td BGCOLOR=FF00FF>
<input type="RADIO" NAME="Background" VALUE="FF00FF"> FF00FF
</td></tr><tr><td BGCOLOR=000000>
<input type="RADIO" NAME="Background" VALUE="000000"> <font COLOR=FFFFFF>000000</font>
</td></tr>
</table>
</td><td>
<table>
<tr><td BGCOLOR=99FF99>
<B><font color=000000>请选择文字颜色</font></B>
</td></tr><tr><td BGCOLOR=FFFFFF>
<input type="RADIO" NAME="Text" VALUE="FFFFFF" CHECKED><font COLOR=000000> FFFFFF </font>
</td></tr><tr><td BGCOLOR=D98719>
<input type="RADIO" NAME="Text" VALUE="D98719"> D98719
</td></tr><tr><td BGCOLOR=D9D919>
<input type="RADIO" NAME="Text" VALUE="D9D919"> D9D919
</td></tr><tr><td BGCOLOR=00FFFF>
<input type="RADIO" NAME="Text" VALUE="00FFFF"> 00FFFF
</td></tr><tr><td BGCOLOR=FF00FF>
<input type="RADIO" NAME="Text" VALUE="FF00FF"> FF00FF
</td></tr><tr><td BGCOLOR=000000>
<input type="RADIO" NAME="Text" VALUE="000000" CHECKED><font COLOR=FFFFFF> 000000 </font>
</td></tr>
</table>
</td></tr>
</table>
<P>
<input type=Submit VALUE="提交选定的颜色">
</FORM>
</font>
</body>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\DeleteColorCookie.asp。
<%@ Language="VBScript" %>
<html>
<head>
</head>
<body>
<font face="MS Gothic">
<%
If Not ("" = Request.Cookies("TextColor")) Then
Response.Cookies("TextColor").Expires = "January 1, 1992"
Response.Cookies("BackgroundColor").Expires = "January 1, 1992" %>
<h2 align=center>已删除内存 cookie </h2>
<P>
用于跟踪显示颜色的 cookie 已被删除。<BR>
请单击<B>设置网页颜色</B>重新设置颜色。
</P>
<% Else %>
<h2 align=center>未删除内存颜色 cookie</h2>
<P>
不存在与您的颜色选择相关的 cookie。<BR>
请单击<B>设置网页颜色</B>设置显示颜色。
</P>
<% End If
%>
</font>
</body>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\Cookie.asp。
<%@ Language="VBScript" %>
<%
LastAccessTime = Request.Cookies("LastTime")
LastAccessDate = Request.Cookies("LastDate")
'如果 NumVisits cookie 为空,设置为 0,否则加 1。
If (Request.Cookies("NumVisits")="") Then
Response.Cookies("NumVisits") = 0
Else
Response.Cookies("NumVisits") = Request.Cookies("NumVisits") + 1
End If
Response.Cookies("LastDate") = Date
Response.Cookies("LastTime") = Time
'以超过当前日期的过期日期创建永久 cookie。
Response.Cookies("LastDate").Expires = "January 15, 2001"
Response.Cookies("LastTime").Expires = "January 15, 2001"
Response.Cookies("NumVisits").Expires = "January 15, 2001"
%>
<html>
<head>
</head>
<% If (Request.Cookies ("TextColor")="") Then %>
<body>
<font face="MS Gothic">
<% Else %>
<body bgcolor=<%=Request.Cookies("BackgroundColor")%> text=<%=Request.Cookies("TextColor")%>>
<font face="MS Gothic" color=<%=Request.Cookies("TextColor")%>>
<% End If %>
<H2 align=center>永久客户端 cookie!</H2>
<P>
创建了三个永久客户端 cookie。
<UL>
<LI>一个 cookie 用于统计您访问网页的次数。</LI>
<LI>一个 cookie 用于确定访问日期。</LI>
<LI>一个 cookie 用于确定访问时间。</LI>
</UL>
</P>
<table border="1" width="300" cellpadding=4 align=center>
<tr><td>
<% If (Request.Cookies ("NumVisits")=0) Then %>
欢迎!这是您第一次访问此网页!
<% Else %>
谢谢您再次光临!您已访问此网页 <B><%=Request.Cookies("NumVisits")%></B> 次。
<% End If %>
</td></tr>
</table>
<P>
<B>当前时间是 <%=Date%><BR><%=Time%>
<% If (Request.Cookies ("NumVisits")>0) Then %>
您上一次访问此网页的时间是 <%=LastAccessDate%><%=LastAccessTime%>
<% End If %>
</strong>
</P>
</font>
</body>
</html>
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将文件保存为 DeleteCookies.asp。
<%@ Language="VBScript" %>
<html>
<head>
</head>
<% If (Request.Cookies ("TextColor")="") Then %>
<body>
<font face="MS Gothic">
<% Else %>
<body bgcolor=<%=Request.Cookies("BackgroundColor")%> text=<%=Request.Cookies("TextColor")%>>
<font face="MS Gothic" color=<%=Request.Cookies("TextColor")%>>
<% End If %>
<%
If Not ("" = Request.Cookies("NumVisits")) Then
Response.Cookies("NumVisits").Expires = "January 1, 1993"
Response.Cookies("LastDate").Expires = "January 1, 1993"
Response.Cookies("LastTime").Expires = "January 1, 1993" %>
<H2 align=center>已删除永久 cookie</H2>
<P>
用于跟踪用户访问以及最后一次访问日期和时间的 cookie 已被删除 。<BR>
请单击<B>设置日期、时间和总访问次数的 cookie</B> 重新设置 cookie。
</P>
<% Else %>
<H2 align=center>未删除任何永久 cookie</H2>
<P>
不存在任何用于跟踪用户访问以及最后一次访问日期和时间的 cookie。<BR>
请单击<B>设置日期、时间和总访问次数的 cookie</B> 重新设置 cookie。
</P>
<% End If %>
</font>
</body>
</html>
不能使用 Session 对象创建内存 cookie。要确保 Session 对象正常工作,需要确定用户访问网站的开始时间和结束时间。IIS 通过 cookie 完成此任务,cookie 存储了 ASP 会话 ID(而 ASP 会话 ID 维护一系列与用户有关的信息)。如果 ASP 会话 ID 不存在,则服务器认为当前请求是一次访问的开始。如果在 20 分钟内(默认时间)没有用户对 ASP 文件发出请求,则访问结束。
在本课中,您将创建下列文件:
可将应用程序(或会话)的开始(或结束)认为是一个事件。通过 Global.asa 文件,您可以使用预定义的事件过程对文件作出响应。
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 C:\Inetpub\Wwwroot\Global.asa。
要点:必须将 Global.asa 文件保存在应用程序的根目录下以便于 ASP 进行查找。假定您有一个名为 C:\Inetpub\Wwwroot\Test 的虚拟路径,其 URL 应为 http://LocalHost/Test,并且 Global.asa 文件必须保存在 C:\Inetpub\Wwwroot\Test 中。我们没有创建映射到 C:\Inetpub\Wwwroot\Tutorial 的虚拟路径,所以根目录仍然是 C:\Inetpub\Wwwroot。
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
'使用应用程序级变量跟踪
'当前浏览网站的用户数量以及
'访问过网站的用户总数
Sub Application_OnStart
'获取得此虚拟目录的物理路径,并附加文件名。
Application("PhysPath") = Server.MapPath(".") & "\hits.txt"
'设置 Visual Basic 变量,并实例化 FileSystemObject 对象。
Const cForReading = 1
Const cTristateUseDefault = -2
Set fsoObject = Server.CreateObject("Scripting.FileSystemObject")
'获取上一次保存的网页点击数以及发生的日期。
If fsoObject.FileExists(Application("PhysPath")) Then
'如果文件 hits.txt 存在,则设置 Application 变量。
Set tsObject = fsoObject.OpenTextFile(Application("PhysPath"), cForReading, cTristateUseDefault)
Application("HitCounter") = tsObject.ReadLine
Application("AppStartDate") = tsObject.ReadLine
tsObject.Close
Else '未保存任何文件,因此将这些值重置。
Application("HitCounter") = 0
Application("AppStartDate") = Date
End If
Application("CurrentUsers") = 0
End Sub
Sub Application_OnEnd
Const cForWriting = 2
Const cTristateUseDefault = -2
Set fsoObject = Server.CreateObject("Scripting.FileSystemObject")
If fsoObject.FileExists(Application("PhysPath")) Then
'如果文件存在,以可写方式将其打开。
set tsObject = fsoObject.OpenTextFile(Application("PhysPath"), cForWriting, cTristateUseDefault)
Else
'如果文件不存在,创建一个新文件。
set tsObject = fsoObject.CreateTextFile(Application("PhysPath"))
End If
'将网站总点击次数和最后一次记录的日期写入文件。
tsObject.WriteLine(Application("HitCounter"))
tsObject.WriteLine(Application("AppStartDate"))
tsObject.Close
End Sub
Sub Session_OnStart
'为演示示例,将 Session 超时默认值
' 改为 1 分钟。
Session.Timeout = 1
'改变 Application 变量时,应将其锁定,防止其他
'会话同时对其进行修改。
Application.Lock
'将网站点击计数器加 1。
Application("HitCounter") = Application("HitCounter") + 1
Application("CurrentUsers") = Application("CurrentUsers") + 1
Application.UnLock
End Sub
Sub Session_OnEnd
Application.Lock
'将当前用户计数器减一。
Application("CurrentUsers") = Application("CurrentUsers") - 1
Application.UnLock
End Sub
</SCRIPT>
可以使用在 Global.asa 中设定的变量计算访问和会话值。
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\VisitCount.asp。可以在浏览器中键入 http://Localhost/Tutorial/VisitCount.asp 查看效果。
在浏览器中打开 http://Localhost/Tutorial/VisitCount.asp 的第二个实例,并在第一个浏览器中单击“刷新”。总访问人数和当前访问人数将加一。关闭第二个浏览器,等待一分钟,并在第一个浏览器中单击“刷新”。当前访问人数将会减一。
<% Response.Buffer = True%>
<html>
<head>
<title>检索在 Global.asa 中设置的变量</title>
</head>
<body>
<font face="MS Gothic">
<H3 align=center>检索在 Global.asa 中设置的变量</H3>
<P>
总访问人数 = <%=Application("HitCounter")%> (自 <%=Application("AppStartDate")%> 起)<BR>
当前访问人数 = <%=Application("CurrentUsers")%>
</P>
</font>
</body>
</html>
某些浏览器不识别 cookie,而且用户也可以选择在浏览器中禁用 cookie。HTTP POST 方法也提供了可以替代 cookie 的另一种维护会话状态的方法。HTTP POST 方法提供的状态信息与 cookie 相同,同时还具有在 cookie 不可用时依然能正常工作的优点。此方法在实践中并不常用,但它是一个非常好的示例。HTTP POST 方法的工作方式与内存 cookie 类似。也就是说,只能在访问期间维护用户信息,而在用户关闭浏览器后,会话状态信息将消失。
在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 C:\Inetpub\Wwwroot\Tutorial\DataEntry.asp。在浏览器中键入 ://Localhost/Tutorial/DataEntry.asp 查看效果。
<%@ Language=VBScript %>
<html>
<head>
<title>不使用 cookie 的数据项</title>
</head>
<body>
<font face="MS Gothic">
<!-- 在本示例中,首先列出子例程。
订购过程的每个网页都具有一个相应的子例程。
主调用代码位于底部。 -->
<% Sub DisplayInitialPage %>
<table border=1 cellpadding=3 cellspacing=0 width=500 bordercolor=#808080 align=center>
<tr><td bgColor=#004080 align=center>
<font color=#ffffff><H2>订购表单</H2></font>
</td></tr><tr><td bgColor=#e1e1e1 align=left>
<P><B>第 1 步,共 4 步</B></P>
<P align=center>
此表单使用 HTTP POST 方法传递包含订购信息的隐藏值。<BR>此表单不使用 cookie。
</P>
<FORM METHOD=POST ACTION="DataEntry.asp" NAME=DataEntryForm>
<P>请输入您的姓名
<INPUT TYPE="TEXT" NAME=FullName>
<BR>请输入虚构的信用卡号码
<INPUT TYPE="TEXT" NAME=CreditCard>
</P>
<!-- 使用隐藏的 HTML 表单变量“NextPage”保持对信息的跟踪。 -->
<INPUT TYPE="HIDDEN" NAME=NextPage VALUE=2>
<INPUT TYPE="SUBMIT" VALUE="下一步 ->" NAME=NextButton>
</FORM>
</td></tr>
</table>
<% End Sub %>
<% Sub DisplayDogBreed %>
<table border=1 cellpadding=3 cellspacing=0 width=500 align=center>
<tr><td bgColor=#004080 align=center>
<font color=#ffffff><H2>订购表单</H2></font>
</td></tr><tr><td bgColor=#e1e1e1>
<P><B>第 2 步,共 4 步</B></P>
<P align=center>
请选择您想要的爱犬类型。
</P>
<FORM METHOD=POST ACTION="DataEntry.asp" NAME=DataEntryForm>
<P>
<INPUT TYPE=RADIO NAME=DogSelected VALUE="小猎犬" CHECKED>小猎犬<BR>
<INPUT TYPE=RADIO NAME=DogSelected VALUE="黑贝">黑贝<BR>
<INPUT TYPE=RADIO NAME=DogSelected VALUE="灰狼">灰狼<BR>
<INPUT TYPE=RADIO NAME=DogSelected VALUE="藏獒">藏獒<BR>
</P>
<!--通过使用隐藏的 HTML 表单变量“NextPage”保持对信息的跟踪。 -->
<INPUT TYPE="HIDDEN" NAME=NextPage VALUE=3>
<INPUT TYPE="SUBMIT" VALUE="下一步 ->" NAME=NextButton>
</FORM>
</td></tr>
</table>
<% End Sub %>
<% Sub DisplayCity %>
<table border=1 cellpadding=3 cellspacing=0 width=500 align=center>
<tr><td bgColor=#004080 align=center>
<font color=#ffffff><H2>订购表单</H2></font>
</td></tr><tr><td bgColor=#e1e1e1>
<P><B>第 3 步,共 4 步</B></P>
<P align=center>
我们会从下列城市中送出您订购的爱犬。请选择与您最近的城市。
</P>
<FORM METHOD=POST ACTION="DataEntry.asp" NAME=DataEntryForm>
<P>
<INPUT TYPE=RADIO NAME=CitySelected VALUE="西安" CHECKED>西安<BR>
<INPUT TYPE=RADIO NAME=CitySelected VALUE="重庆">重庆<BR>
<INPUT TYPE=RADIO NAME=CitySelected VALUE="上海">上海<BR>
<INPUT TYPE=RADIO NAME=CitySelected VALUE="北京">北京<BR>
</P>
<!--使用隐藏的 HTML 表单变量“NextPage”保持对信息的跟踪。-->
<INPUT TYPE="HIDDEN" NAME=NextPage VALUE=4>
<INPUT TYPE="SUBMIT" VALUE="下一步 ->" NAME=NextButton>
</FORM>
</td></tr>
</table>
<% End Sub %>
<% Sub DisplaySummary %>
<table border=1 cellpadding=3 cellspacing=0 width=500 align=center>
<tr><td bgColor=#004080 align=center>
<font color=#ffffff><H2>订购表单完成</H2></font>
</td></tr><tr><td bgColor=#e1e1e1>
<P><B>第 4 步,共 4 步</B></P>
<P align=center>
您输入了下列信息。<BR>
如果您的姓名和信用卡号码正确,
将进行交易,完成订购过程。
</P>
<table cellpadding=4>
<tr bgcolor=#ffffcc><td>
Name
</td><td>
<%=Session.Value("FullName")%>
</td></tr><tr bgcolor=Beige><td>
信用卡
</td><td>
<%=Session.Value("CreditCard")%>
</td></tr><tr bgcolor=Beige><td>
订购的爱犬
</td><td>
<%=Session.Value("DogSelected")%>
</td></tr><tr bgcolor=Beige><td>
订购的城市
</td><td>
<%=Session.Value("CitySelected")%>
</td></tr>
</table>
</td>
</tr>
</table>
<% End Sub %>
<% Sub StoreUserDataInSessionObject %>
<%
Dim FormKey
For Each FormKey in Request.Form
Session(FormKey) = Request.Form.Item(FormKey)
Next
%>
<% End Sub %>
<%
'此处为根据隐藏表单元素调用子例程的
' 主代码。
Dim CurrentPage
If Request.Form.Item("NextPage") = "" Then
CurrentPage = 1
Else
CurrentPage = Request.Form.Item("NextPage")
End If
'保存所有用户数据。
Call StoreUserDataInSessionObject
Select Case CurrentPage
Case 1 : Call DisplayInitialPage
Case 2 : Call DisplayDogBreed
Case 3 : Call DisplayCity
Case 4 : Call DisplaySummary
End Select %>
<BR>
<HR>
<H3 align=center><A HREF="DataEntry.asp">重置表单</A></H3>
</font>
</body>
</html>