在浏览器和 Web 服务器之间传送状态

保持状态信息的一种最简单的方法是使信息成为在浏览器和Web服务器之间传送的请求和响应的一部分。有三种途径去实现它:

每一种途径有它自己的优点和缺点。Cookie 可能有时允许发送比 URLData 或隐藏字段更多的信息,但某些浏览器可能不允许 cookie 功能。URLData 将信息连接到一个特定的页面,它可能是非常有用的。隐藏的字段将信息绑定到一个指定页面的指定窗体,当您发送少量数据时这种方法最好。

使用 Cookie 传送状态信息

您可以使用 cookie 在一个会话期间保持某些状态信息。Cookie 是服务器发送到浏览器的一个小信息包,浏览器保存这些信息以便处理此服务器的后续事务。Cookie 中包括有关当前用户信息和一个状态有效的 URL 范围。当浏览器在这个范围中产生另一个 HTTP请求时,将 cookie 包括在请求数据中。这就允许您保持有关服务器请求的信息,并在客户和服务器之间传送它。

最经常的情况,cookie 通常在客户端保存一个数据库关键字,然后服务器使用它来获取状态信息。在这种方案中,将数据库关键字写到 cookie 中并把它传送到客户端保存。下一次浏览器发送一个包括 cookie 的请求到同一个 Web 站点。然后这个 Web 站点使用 cookie 值从数据库表中获取合适的信息。

对您可以发送的 cookie 数量和由单一站点可以发出的数量都有一个限制。建议在应用程序中使用少量的 cookie,不要使用它们发送大量的数据。由于它们的大小有限制,cookie 最适合于发送小块的信息如用户的 ID。

注意 记住在浏览器中用户能够关闭支持 cookie 的这种能力,可能暂时或完全不支持 cookie。

Cookie 是对一个指定服务器,而不是应用程序中一个指定页面保存信息的。如果您想对一个特殊的页面分配一个特有的状态信息,可以使用 URLData 属性来管理您的状态信息。关于详细的信息,请参阅下面的“利用 URLData 属性传递状态信息”。

详细信息 关于使用 cookie 的详细信息,请参阅您选择的 HTML 参考。

使用 URLData 属性传送状态信息

您可以使用 URLData 属性在浏览器和 Web 服务器之间传送状态信息。URLData 属性将信息追加到 webclass 发送到浏览器的特定 URL 中。当浏览器使用这些 URL 之一提交另一个请求时,这些信息可以被传回到 Web 服务器以做进一步的处理。通过这种方式,您可以在两端都没有存储信息的情况下发送和获取状态信息。

URLData 属性提供了几个优点:

URLData 有两个缺点:第一,URLData 在发送数据的数量上是受限制的。大小的限制随着浏览器的不同而变化,但是大多数浏览器能处理 URL 中大约2K 的数据。在应用程序中应当测试打算使用的 URL 长度。第二,如果您正在 Internet Explorer 4. x中使用一个具有 GET 方法的窗体,URLData是一种不可行的发送信息方法。在这种情况下,可使用 POST 方法,或使用另外的手段来传送状态。

URLData 属性可以在两种情况下应 webclass 的响应添加信息到 URL:

在 WriteTemplate 方案中,webclass 都产生一个响应,该响应典型地包括将一个模板文件格式化以发送到浏览器。URLData 属性告诉 webclass 对模板执行附加的处理,它必须追加指定的信息到包含一个称为 WCU 的参数的模板文件中的每一个 URL。

注意 您每次在将一个标记属性连接到一个 webitem 或事件时,webclass 都将 WCU 参数添加到您的模板。如果您没有模板,则可以手工添加该注释。

这种状态管理的方法在您已经选择 wcNoState 作为 webclass 的 StateManagement 属性的设置时非常有用。当 wcNoState 被选择时,您不能在服务器的 WebClass 对象中保存信息。

设置一个 URLData 响应的状态信息

要设置 URLData 使用的状态信息,您只需简单地给事件过程的 URLData 属性赋一个值。处理的不同在于您是否使用模板:

注意 当 webclass 将 URL 数据赋值给 WCU 参数时,它将扫描该文件中出现的所有 &WCU 和 ?WCU,并将 URLData 属性的值以 &WCU=Your URL data 的格式赋给它们。如果由于某些原因,您希望字母 ?WCU 或 &WCU 作为您模板文本的一部分出现,并且您希望当 webclass 对文件做语法分析时忽略该文本,则请将文本作为 ?WCUWCU 或 &WCUWCU 输入。当 webclass 在运行时发现类似这样的字符串时,它将去掉多余的 WCU 并如您所愿保留文本。只有在您将一个值赋给 URLData 时,才需要这一附加的编码过程。

例如,下面的代码显示了如何在一个称为“Item2”的 webitem 的 Set 的自定义事件中设置状态数据:

Private Sub Item2_Set()
'设置 URLData 属性的值
URLData = "CustomerID: 77788"

'使用 URLFor 函数启动一个响应。
Response.Write "<A HREF=""" & URLFor(Item3) & """>Go to Item 3</A>"

End Sub

从一个 URLData 请求中获取状态信息

如果您在前面已经设置了一个响应的 URLData 属性,则当 webclass 处理包含数据的 URL 时,您发送到浏览器的信息将返回给您。为在 Web 服务器上操作和处理状态信息,您可以检索这个 URLData 属性的值。

例如,下面的代码显示了如何在一个称为“Item2”webitem 的 Respond 事件中检索状态数据:

Private Sub Item2_Respond()
   
   '检索状态信息并用它来自定义一个响应。
   Response.Write "Welcome back," & FetchNameFromDatabase(Me.URLData)
   
End Sub

详细信息 关于在应用程序中使用 URLData 属性设置一个漫游顺序的详细信息,请参阅“处理 Webclasses 的顺序”。请参阅《语言参考》中的“URLData 属性”。

使用隐藏的字段

您可以在您的一个 Web 页面上使用 HTML HiddenField 控件,并使用该字段来保存当前页面的信息。这种状态管理的方法仅用于包含一个窗体的 HTML 页面。

隐藏字段对于指定窗体保持状态是很有效的,并且很容易从 cookie 或其他客户端的脚本中访问。使用隐藏字段的主要缺点是它们传送的信息被绑定到一个窗体,并且可以在该页面的 HTML 源视图中得到,所以,能够访问 HTML 源的任何人都可以查看此数据。当使用这种方法时您可能要对数据进行加密。

详细信息 关于使用隐藏字段的详细信息,请参阅您选择的 HTML 参考。