如何在活动服务器页面应用程序中的存储状态

文章翻译 文章翻译
文章编号: 175167 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

当您开发一个活动服务器页面 (ASP) Web 应用程序,自定义内容的常用方法是与用户有关的信息存储。有几种方法在 ASP 中存储信息的环境。最常用的方法来存储状态的代码示例和专业人士和每个选项的缺点包括此项目列表。

更多信息

会话和应用程序变量

它们是如何工作的?

在服务器上存储 会话应用程序 变量。一个 SessionID ASP 会话的开始时生成的是存储在客户端能够识别 会话 变量的内存中的 cookie。如此一来在客户端必须启用浏览器的工作 会话应用程序 变量中的 cookie。

专业人员

  • 此方法很容易实现。
  • 您可以将简单的变量类型和对象存储 (尽管建议不要存储对象)。
  • 在会话和应用程序变量中存储的值是隐藏的用户。

缺点

  • 此方法要求客户端具有在其 Web 浏览器中启用的 cookie。
  • 此方法不能可靠地在框架在框架集中或跨多个浏览器实例之间共享。
  • 此方法将信息存储在 Web 服务器上。这将减少在两种方法中的可扩展性: 会话应用程序 的变量在上使用的资源,它们不能使用上完全负载平衡 Web 服务器场。

示例

设置会话变量的值:
<%
   'Store information in a session variable.
   Session("myInformation") = "somevalue"
%>
				
会话变量中检索值:
<%
    'Retrieve the information stored in the session variable.
    myValue = Session("myInformation")
%>
				

cookie

它们是如何工作的?

有两种类型的 cookie: 内存中的 cookie 和到客户端的磁盘存储的 cookie。一个内存中的 cookie 是存储在浏览器的内存中直到关闭浏览器的一个或多个名称-值对。若要存储的 cookie 磁盘是包含名称 / 值对的客户端的计算机上的文件。

cookie 可以设置和检索从客户端和服务器端代码。

专业人员

  • 此方法很容易实现。
  • 此方法可以将它们保存到磁盘,以供将来使用 (基于磁盘的 cookie) 由只需设置该 cookie 中的到期日期。这使得浏览器会话之间存储。

缺点

  • 客户端可以手动修改存储的 cookie 到磁盘。
  • 此方法要求客户端具有在其 Web 浏览器中启用的 cookie。
  • cookie 不能存储对象。

示例

在 cookie 中存储的信息:
<%
   'Set a cookie value.
   Response.Cookies("myInformation") = "somevalue"
   'Expire the cookie to save it to disk. If this is omitted, the cookie
   'will be an in-memory cookie. In this case, the cookie is set to expire
   'in twenty days.
   Response.Cookies("myInformation").Expires = now() + 20
%>
				
从 cookie 中检索值:
<%
    'Retrieve the information that is stored.
    myValue = Request.Cookies("myInformation")
%>
				

隐藏窗体域

它们是如何工作的?

每个页需要具有隐藏的窗体字段包含状态信息的窗体。链接,并将重定向到页而不是当用户浏览到另一页时提交窗体。

专业人员

  • 此方法不需要的 cookie。

缺点

  • 它可以是重定向和链接到网页的麻烦。
  • 此方法不能存储对象。

示例

在隐藏字段中存储的信息:
<HTML>
<HEAD>
<SCRIPT LANGUAGE=javascript>
  //Function that is used to submit the links:
  function browseToUrl(url){
    form1.action=url;
    form1.submit();
  }
</SCRIPT>
</HEAD>
<BODY>

<%
  dim myInformation
  myInformation = "somevalue"  
%>

<!-- This stores the value that is set above in the hidden form field. -->
<FORM id="form1" name="form1" action="" method="post">
<INPUT type="hidden" id="myInformation" name="myInformation" value="<%= myInformation%>">  

<!-- Navigation sample that uses this technique. -->
<INPUT type="button" value="p3.asp" id=button1 name=button1 onclick='goToUrl("p3.asp");'>
</FORM>
</BODY>
</HTML>
				
从隐藏的窗体域中检索值:
<%
    'Retrieving the information that is stored.
    myValue = Request.Form("myInformation")
%>
				

查询字符串

它是如何工作的?

您在使用 查询字符串 集合时该变量名称-值对形式存储在 URL 中。例如:
http://servername/page.asp?var1=value1&var2=value2&var3=value3
				
: 用一个 and 符 (&amp;) 分隔名称-值对。

专业人员

  • 如果客户端创建一个书签页,状态将会保留。

缺点

  • 完整的 URL 只能为 2083 个字节。
  • 此方法不能存储对象。
  • 该 URL 是非常长而且难以阅读。

示例

在查询字符串中存储的信息:
<HTML>
<HEAD></HEAD>
<BODY>
<%
   'Function that assembles the QueryString:
   function AddToQueryString(qs, name, value)
     
     if qs="" then
       qs = name & "=" & value
     else
       qs = qs & "&" & name & "=" & value
     end if
     
     addToQueryString = qs
   end function

   dim querystring

   'Store the first value.
   querystring = AddToQueryString(querystring, "firstvar", "firstvalue")
   'Store the second value.
   querystring = AddToQueryString(querystring, "secondvar", "secondvalue")
%>

<a href="urlreceive.asp?<%=querystring%>">urlreceive.asp</a>
</BODY>
</HTML>
				
从该查询字符串中检索值:
<%
    'Retrieve the information stored.
    myFirstValue = Request.QueryString("firstvar")
    mySecondValue = Request.QueryString("secondvar")
%>
				

文件和数据库

它们是如何工作的?

您可以按照许多不同的方法实现这种技术。下面的步骤说明了实现文件和数据库存储的状态的一种方法:
  1. 生成一个 ID,当用户首次登录时或浏览到您的应用程序内的页。
  2. 使用该技术的任何在这篇文章中存储此 id。
  3. 若要将值存储在一个文件,使用文件名称为 ID。 若要将值存储在数据库中,使用标识记录的 ID 和名称 / 值对的组合。
  4. 还可以使用名称-值对,在数据库中的存储时间戳。文件,您可以使用从上一次修订时间戳。
  5. 编写一个服务,以便在特定时间间隔 (例如对于每隔 20 分钟或每晚基于多少用户访问该网站) 执行清理 (删除记录和文件)。该服务可以使用时间戳来确定记录是否已过期。

专业人员

  • 值是完全隐藏的用户。
  • 如果您使用的文件共享或 $ 数据库,这可用于模拟 Web 场中的会话变量。
  • 它不需要的 cookie。

缺点

  • 它存储在服务器端的数据。
  • 它可以是实现麻烦。
  • 由于数据库和文件访问需要存储和检索值,此方法就会很慢。

参考

有关详细的信息请参阅下列文章 Microsoft 开发人员网络 (MSDN):
会话对象
http://msdn2.microsoft.com/en-us/library/aa371675.aspx

应用程序对象
http://msdn2.microsoft.com/en-us/library/aa210897(office.11).aspx

cookie
Response.Cookies Collection
Request.Cookies Collection

查询字符串
http://msdn2.microsoft.com/en-us/library/aa196462(office.11).aspx
有关更多的信息请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
244465如何禁用 ASP 会话状态中活动服务器页面
178037会话变量丢失时 ASP 位于 Frameset PRB:
为最新的知识库文章和 Visual InterDev 和 $ 活动服务器页面上的其他支持信息,请在 Microsoft 技术支持网站上看到以下页:
http://support.microsoft.com/search/default.aspx?qu=vinterdev

属性

文章编号: 175167 - 最后修改: 2007年3月9日 - 修订: 3.1
这篇文章中的信息适用于:
  • Microsoft Active Server Pages 4.0
关键字:?
kbmt kbaspobj kbcodesnippet kbhowto kbscript KB175167 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 175167
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com