页面每次被回传到服务器的时候都会创建 Web 页面类的一个新实例。在传统的 Web 开发中,这意味着在每次回传的过程中,页面中所有与页面和控件相关联的信息都将被丢失。例如,如果用户在一个文本框中输入了信息,那么在浏览器或者其他客户端设备与服务器的回传过程中,文本框中的信息将被丢失。

要克服 Web 开发的这个固有的局限性,ASP.NET 包括了几个选项来帮助你在单页面和应用程序中保持数据。这些特征如下所示:

  • 视图状态

  • 控件状态

  • 隐藏字段

  • Cookies

  • 查询字符串

  • 应用程序状态

  • 会话状态

  • 档案属性

视图状态、控件状态、隐藏字段、Cookies、以及查询字符串包括了在客户端保存数据的不同方法。但是,应用程序状态、会话状态、以及档案属性则在服务器的内存中保存数据。每个选项都有各自不同的优势和缺点,这取决于具体情况而定。

基于客户端的状态管理选项

下列部分描述了在页面或者客户端计算机中保存信息的状态管理选项。这些选项在回传的过程中不需要在服务器中维护任何信息。

视图状态

ViewState 属性提供了一个字典对象来为相同的页面在多个请求之间保持值。这是页面在回传过程之间用来保持页面和控件属性值的默认方法。

一旦页面被处理,页面和控件的当前状态就会被混列进一个字符串并且保存成页面的一个隐藏字段,如果被保存在 ViewState 属性中的数据个数超出了 MaxPageStateFieldLength 属性所指定的值,那么页面中将出现多个隐藏字段。当页面被回传到服务器的时候,被回传的页面会在初始化并恢复属性信息的时候对其中的视图状态字符串进行处理。

你能够把值保存到视图状态中。关于详细内容,请参考:[ASP.NET 实践:在视图状态中保存值]。关于应该在何时使用视图状态的建议,请参考:[ASP.NET 状态管理的建议]。

控件状态

有时候你需要为了控件的正常工作而保存控件的状态数据。例如,如果你编写了一个使用不同的制表页来显示不同信息的自定义控件,如果要想让控件能够正常工作,那么控件就需要在回传的过程中知道哪个制表页是被选中的。ViewState 属性就能够用于这个目的,但是视图状态能够页面级别被开发者所关闭,从而破坏了控件的正常功能。要解决这个问题,ASP.NET 页面框架暴露了一个被称作控件状态的 ASP.NET 特征。

ControlState 属性允许你保持特定控件的属性信息,并且不会像 ViewState 属性一样能够被关闭。

隐藏字段

ASP.NET 允许你在 HiddenField 控件中保存信息,该控件是作为一个标准的 HTML 隐藏字段而呈现在页面中的。隐藏字段在浏览器中是不可见的,但是你能够像标准控件一样来设置它的属性。当页面被提交到服务器之后,隐藏字段的内容会连同其他控件一起被发送到 HTTP 窗体集中。隐藏字段为所有需要直接保存到页面中的特定信息而扮演着贮藏室的角色。

安全提示:恶意用户很容易就能够查看到隐藏字段的内容并且进行更改。所以,请不要把任何机密信息或者应用程序正常工作时所必需的信息保存到隐藏字段中。关于更多信息,请参考:[ASSP.NET 状态管理的建议]。

HiddenField 控件在它的 Value 属性中保存单个变量并且必须被明确地被添加到页面中。关于详细信息,请参考:[HiddenField Web 服务器控件概览]。

要在页面处理期间使隐藏字段的值生效,你必须使用 HTTP POST 命令来提交页面。如果你使用隐藏字段并且页面是为了响应连接或者 HTTP GET 命令而被处理的,那么隐藏字段将不再有效。关于使用建议,请参考:[ASP.NET 状态管理的建议]。

Cookies

Cookies 是既能够保存在客户端文件系统的文本文件中也能够保存在客户端浏览器的会话内存中的少量数据。它包含服务器连同页面输出一起被发送到客户端的网站特定信息。Cookies 能够是临时性的(通过指定过期时间和日期)也能够是持久性的。

你能够使用 Cookies 来保存关于特定的客户端、会话、或者应用程序的相关信息。Cookies 被保存在客户端设备中,并且在浏览器请求页面的时候,客户端会连同请求信息一起发送 Cookies 中的信息。服务器能够读取这些 Cookies 并且提取它们的值。Cookies 的一个典型用途就是用来保存指示用户地否被应用程序所验证的记号(可能已经被加密)。

安全提示:浏览器只能够把数据回发到最初创建 Cookies 的服务器。但是,恶意用户也能够对 Cookies 进行访问并且读取它们的内容。所以建议你不要在 Cookies 中保存机密信息(如用户名称或者密码)。而是在 Cookies 中保存识别用户的记号,然后使用这个记号来查寻服务器上的机密信息。

关于更多使用 Cookies 的信息,请参考:[Cookies]和[ASP.NET 状态管理的建议]。

查询字符串

查询字符串是被添加到页面 URL 结束部分的信息。典型的查询字符串看起来可能像下列实例:

http://www.contoso.com/listwidgets.aspx?category=basic&price=100

在上面的 URL 路径中,查询字符串使用问号(?)作为开始并且包括两个 Attribute/Value 数据对,一个被命名为 category 而另一个被命名被 price。

查询字符串为维护状态信息提供了一个简单的方法,但是它仍然受到某种程度的限制。例如,它们在从一个页面到另一个页面传递数据的时候是非常方便的,如从一个页面中传递一个产品编号到另一个将会对该编号进行处理的页面中。但是,有些浏览器和客户端设备却限制了 URL 的长度最多不能够超过 2083 个字符。

安全提示:在查询字符串中被传递的信息能够被恶意用户所篡改。请不要在查询字符串中包含重要数据或机密数据。另外,用户能够对 URL 进行标记或者把 URL 发送给其他的用户,因此查询字符串也被连同在一起被标记或者被转发。关于更多信息,请参考:[ASP.NET 状态管理的建议]和[ASP.NET 实践:在 Web 应用程序中对字符串进行 HTML 编码来保护反向脚本开发]。

要在页面处理期间使查询字符串的值生效,你必须使用 HTTP GET 命令来提交页面。也就是说,你不能在页面回应 HTTP POST 命令的处理过程中获得查询串的优势。关于使用建议,请参考:[ASP.NET 状态管理的建议]。

基于服务器的状态管理选项

ASP.NET 为你提供了在服务器上维护状态信息的多种方式,胜于客户端的信息保持。使用基于服务器的状态管理,你能够减少需要发送给客户端所保持的状态信息量,但是它需要在服务器中使用昂贵的资源。下列部分描述了三个基于服务器的状态管理特征:应用程序状态、会话状态、以及档案属性。

应用程序状态

ASP.NET 允许你使用应用程序状态来保存值,每一个活动的 Web 应用程序中都有一个 HttpApplicationState 类的实例。应用程序状态是一个全局存储机制,Web 应用程序中的所有页面都能够对其进行访问。因此,应用程序状态有助于保存需要在服务器回传过程之间以及页面的请求之间所维护的信息。关于更多信息,请参考:[ASP.NET 应用程序状态概览]。

应用程序状态被保存在每个特定 URL 的请求期间所创建的一个 Key/Value 字典中。你能够把特定的应用程序信息添加到这个结构中,以在页面请求之间实现共享。

一旦你把特定的应用程序信息保存到应用程序状态中,服务器就会对它进行管理。关于使用建议,请参考:[ASP.NET 状态管理的建议]。

会话状态

ASP.NET 允许你使用会话状态来保存值,每一个活动的 Web 应用程序会话中都有一个 HttpSessionState 类的实例。关于详细内容,请参考:[会话状态概览]。

会话状态类似于应用程序状态,不同之处就是它只适用于当前浏览器会话的范围。如果有不同的用户在使用应用程序,那么每个用户会话中都将拥有不同的会话状态。另外,如果用户离开了应用程序并且再次回来,第二个用户会话的会话状态将完全区别于第一个会话。

会话状态由一个 Key/Value 字典所组成,用来保存需要在服务器回传过程之间和页面的请求之间所维护的特定话信息。关于更多信息,请参考:[会话状态概览]。

你能够使用会话状态来完成下列任务:

  • 单独识别浏览器或客户端设备的请求并把它们映射到服务器中的单独会话实例中。

  • 为在相同会话中使用跨多个浏览器或客户端设备的请求而在服务器中保存会话的特定数据。

  • 引发适当的会话管理事件。另外,你可以编写应用程序代码来处理这些事件。

一旦你在会话状态中添加了特定的应用程序信息之后,服务器就会对该对象进行管理。这取决于你所指定的选项,会话信息能够被保存进 Cookies、进程外服务器、或者是运行 Microsoft SQL Server 的计算机。关于使用建议,请参考:[ASP.NET 状态管理的建议]。

档案属性

ASP.NET 提供了一个被称作档案属性的特征,允许你保存特定的用户数据。这个特征与会话状态类似,不同之处就是档案数据不会在用户的会话过期的时候被丢失。档案属性特征所使用的 ASP.NET 档案被保存在一个持续格式中并且与单独的用户相关联。ASP.NET 档案允许你在不需要创建并维护自定义数据库的情况下来简化对用户信息的管理。另外,档案还使用一个强类型的 API 使用户信息能够生效,你能够在应用程序的任何位置对这个 API 进行访问。你能够在档案中保存任何类型的对象。ASP.NET 档案特征提供了一个普通的存储系统来允许你在仍然需要在类型安全规则中使数据生效的情况下定义并维护几乎所有类型的数据。

要使用档案属性,你必须先配置一个档案提供者。ASP.NET 包括一个允许你在 SQL 数据库中保存档案数据的 SqlProfileProvider 类,但是你同样能够创建自定义的档案提供者类,把档案数据以自定义的格式保存到一个自定义存储机制中(如 XML 文件、或者甚至是 Web Services)。

因为保存在档案属性中的数据并没有被保存到应用程序的内存中,所以可以防止在 Internet 信息服务(IIS)被重启和工作者进程被重启的时候所造成的数据丢失。另外,档案属性还能够跨多个进程(如 Web 农场或 Web 花园)而被保持。关于更多信息,请参考:[ASP.NET 档案属性概览]。

转载于:https://www.cnblogs.com/Laeb/archive/2007/01/10/616988.html

ASP.NET 状态管理概览相关推荐

  1. ASP.NET 状态视图概览

    Web 应用程序是无状态的.服务器中的页面在每一次被请求的时候都会创建 Web 页面类的新实例.这通常意谓着所有与页面和控件相关联的信息在每次回传过程中都将被丢失.例如,如果用户在某个 HTML We ...

  2. ASP.NET 状态管理概述(MSDN)

    每次将网页发送到服务器时,都会创建网页类的一个新实例.在传统的 Web 编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失.例如,如果用户将信息输入到文本框,该信息将 ...

  3. ASP.NET状态管理之三(隐藏域HiddenField)

    ASP.NET 允许您将信息存储在 HiddenField 控件中,此控件将呈现为一个标准的 HTML 隐藏域. 隐藏域在浏览器中不以可见的形式呈现,但您可以就像对待标准控件一样设置其属性. 当向服务 ...

  4. 【转】【C#.NET】ASP.NET状态管理之一:Cookie

    [C#.NET]ASP.NET状态管理之一:Cookie 状态管理是你对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指 ...

  5. ASP.NET状态管理之六(缓存Cache)

    ASP.NET状态管理之六(缓存Cache) ASP.NET 为您提供了一个强大的.便于使用的缓存机制,用于将需要大量服务器资源来创建的对象存储在内存中.缓存这些类型的资源会大大改进应用程序的性能. ...

  6. ASP.NET状态管理之一(概括篇)

    每次将网页发送到服务器时,都会创建网页类的一个新实例.在传统的Web编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失.例如,如果用户将信息输入到文本框,该信息将在从 ...

  7. ASP.NET状态管理之五(Cookie)

    Cookie 提供了一种在 Web 应用程序中存储用户特定信息的方法. 例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息.当该用户再次访问您的网站时,应用程序便可以检索以 ...

  8. ASP.NET状态管理

    第一部分:页面状态介绍 Http协议----"无状态协议" Web服务器每分钟对上千个用户进行管理的一种方式就是执行所谓的"无状态"链接.只要有一个希望浏览器返 ...

  9. ASP.NET状态管理之十三(总结)

    状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程.与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例 ...

最新文章

  1. matlab怎么调用DeepLearn,使用DeepLearnToolbox-master中DBN工具箱做数据分类出现问题,求......
  2. 第九届蓝桥杯java B组—第二题方格计数(详细介绍)
  3. leetcode 18. 四数之和(双指针)
  4. javascript笔记整理(对象基础)
  5. android系统性能优化(63)---Android APP 卡顿问题分析及解决方案
  6. cocos2d-x3.6 连连看随机地图实现
  7. HTM皮质学习算法资料
  8. 树莓派(Arduino)仿真软件 —— Fritzing
  9. junit测试给定默认的jvm参数
  10. 来了来了!github开源作业车间调度平台正式上线!
  11. Tomcat服务器内存修改
  12. python是自由开放源代码软件吗_附录:免费/自由和开放源码软件
  13. 色鬼色狼和色仙的区别
  14. 前端使用Aliplayer 播放器 播放rtmp直播流
  15. 雨滴式的显示图片 (cloud 转贴) (转)
  16. UI自动化测试实战--- app订单、web发货(9)
  17. Android 解析微信基础表情并显示
  18. 实现元素水平垂直居中的4种方法
  19. 2021-05-11PLC通信Libnodave-明天继续
  20. 巧用接口解耦分离实现

热门文章

  1. PPT如何让多对象排列整齐
  2. paip.C#.NET JSON解析总结
  3. 正则表达式||grep的使用
  4. 自动以及手动清除手机垃圾文件
  5. (php)thinkphp3.2配置sql_server
  6. Supplemental Logging
  7. java中List、Map、Set、Collection、Stack、Queue等的使用
  8. 基于JavaScript技术的横排文字转古书式竖排工具
  9. gcc oracle mysql_Linux下C语言访问Oracle数据库Demo
  10. 如何更改您的iPhone铃声