# 单元 3：维护会话状态

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

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

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

本单元包括下列课程：

- 使用 cookie 维护会话状态 提供两个 cookie 示例，一个使用 ASP Response 和 Request 对象，而另一个使用 ASP Session 对象。
- 不使用 cookie 维护会话状态 提供一个 HTTP POST 示例。使用 HTTP POST 可以达到与使用 cookie 维护会话状态相同的效果。

## 使用 cookie 维护会话状态

cookie 存储一组用户特定的信息，比如信用卡号码或密码。Web 服务器将 cookie 嵌入到用户的 Web 浏览器中，以便用户信息也可用于网站的其他网页。因此，用户不必为访问的每一个网页重新输入信息。在为网上购物、保留 Web 用户个人首选项或维护用户状态而收集客户信息时，cookie 是一种有效的方法。

有两种类型的 cookie，如下所示：

- 内存 cookie 用户关闭浏览器时，内存 cookie 同时被释放。
- 永久 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

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

- Response 对象 使用 Response 对象创建和设置 cookie 值。
- Request 对象 使用 Request 对象检索上一个 Web 会话中创建的 cookie 值。

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

- Frame.htm 将用户视图拆分为两个窗口。此网页需要 Menu.htm 和 CustomGreeting.asp。
- Menu.htm 此网页包含到本课程示例的链接。要确保这些链接正常工作，必须已经创建了所有其他的网页。
- CustomGreeting.asp 在表单中取得用户名，并设置内存 cookie。
- DeleteGreetingCookie.asp 删除包含用户名的 cookie。如果没有设置 cookie，则显示警告。
- SelectColors.asp 为用户的颜色选择设置 cookie。
- DeleteColorCookie.asp 删除以前选择的 Web 颜色。如果没有选择颜色，则显示警告。
- Cookie.asp 设置永久 cookie，保存用户访问的当前日期和时间，并记录访问的总次数。
- DeleteCookies.asp 删除 Cookie.asp 中的 cookie。如果 cookie 不存在，将会显示警告。

#### 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 文件，您可以在应用程序的开始以及每个用户会话的开始执行一些一般性操作。应用程序在第一次、第一个用户请求网页时开始，在应用程序被卸载或服务器脱机时结束。在请求开始时为每个用户分配唯一的会话，并且会话在用户请求最后一个网页后 20 分钟结束。在 Global.asa 中可以执行的一般性操作包括设置应用程序或会话变量、验证用户身份、实例化在整个应用程序或会话中一直活动的 COM 对象等。
- VisitCount.asp 此 ASP 脚本使用 Session 对象创建内存 cookie。

可将应用程序（或会话）的开始（或结束）认为是一个事件。通过 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. 保留所有权利。