单元 3:维护会话状态

本单元说明在 Active Server Pages (ASP) 中维护会话状态的过程。会话是指特定用户查看网站内容的时间段,从用户开始访问网站的第一个网页时开始,在用户离开网站若干分钟后结束。与特定会话相关的用户特定信息,统称为会话状态。

因为 HTTP 是非状态协议,这就产生一个问题,即应当如何维护用户访问网站的状态。Web 服务器将每一个 HTTP 请求都看作独立的请求,而与以前的请求无关。这样,用户在请求的下一个网页中自动获得在上一个网页中输入(例如通过表单)的信息。Web 服务器必须维护会话状态,以便在用户浏览网站上的多个网页时可以识别和跟踪用户。

一个解决方案是使用 cookie。cookie 记录用户在一个网页上的信息并将此信息传递给网站内的其他网页。然而,一些浏览器不识别 cookie,而在另外一些浏览器上,用户可能禁用 cookie。如果考虑到这些 Web 用户的需要,您可以通过 HTTP POST 而不是使用 cookie 来维护会话状态。

本单元包括下列课程:


使用 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

可以使用 ResponseRequest 对象生成永久 cookie,尽管这些对象也可以用于创建内存 cookie。大多数 Web 应用程序利用这些对象维护会话状态。

在本课中,将使用 ResponseRequest 对象创建下列文件。请一次创建全部文件,因为其中某些文件会需要另外一些文件。在创建所有文件后,通过在浏览器中键入 http://LocalHost/Tutorial/Frame.htm 运行此应用程序。


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>


Menu.htm

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 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>


CustomGreeting.asp

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 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>


DeleteGreetingCookie.asp

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 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>


SelectColors.asp

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 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>


DeleteColorCookie.asp

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将其保存为 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>


Cookie.asp

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 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

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件中,并将文件保存为 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 对象创建内存 cookie。要确保 Session 对象正常工作,需要确定用户访问网站的开始时间和结束时间。IIS 通过 cookie 完成此任务,cookie 存储了 ASP 会话 ID(而 ASP 会话 ID 维护一系列与用户有关的信息)。如果 ASP 会话 ID 不存在,则服务器认为当前请求是一次访问的开始。如果在 20 分钟内(默认时间)没有用户对 ASP 文件发出请求,则访问结束。

在本课中,您将创建下列文件:

可将应用程序(或会话)的开始(或结束)认为是一个事件。通过 Global.asa 文件,您可以使用预定义的事件过程对文件作出响应。


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>


VisitCount.asp

可以使用在 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,而且用户也可以选择在浏览器中禁用 cookie。HTTP POST 方法也提供了可以替代 cookie 的另一种维护会话状态的方法。HTTP POST 方法提供的状态信息与 cookie 相同,同时还具有在 cookie 不可用时依然能正常工作的优点。此方法在实践中并不常用,但它是一个非常好的示例。HTTP POST 方法的工作方式与内存 cookie 类似。也就是说,只能在访问期间维护用户信息,而在用户关闭浏览器后,会话状态信息将消失。


DataEntry.asp

在文本编辑器中打开一个新文件,将下列脚本粘贴到文件,并将其保存为 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>


© 1997-2001 Microsoft Corporation. 保留所有权利。