ASP.NET状态管理之十三(总结)
状态管理是您对同一页或不同页的多个请求维护状态和页信息的过程。与所有基于 HTTP 的技术一样,Web 窗体页是无状态的,这意味着它们不自动指示序列中的请求是否全部来自相同的客户端,或者单个浏览器实例是否一直在查看页或站点。此外,到服务器的每一往返过程都将销毁并重新创建页;因此,如果超出了单个页的生命周期,页信息将不存在。 ASP.NET 提供多种方式来在服务器往返过程之间维护状态。对这些状态管理选项的选择主要取决于您的应用程序,并且应基于以下条件: 需要存储的信息量有多大? 客户端是接受持久性的还是内存中的 Cookie? 要将信息存储在客户端还是服务器上? 信息是否是敏感信息? 您对应用程序设定了什么样的性能和带宽条件? 目标浏览器和设备具有什么样的功能? 您是否需要储存基于用户的信息? 信息需要存储多长时间? 您使用 Web 场(多个服务器)、Web 园(一个计算机上的多个进程)还是单个进程来运行应用程序? 客户端状态管理 视图状态 Web 窗体页提供 ViewState 属性作为内置结构,在对同一页的多个请求间自动保留值。视图状态作为页中的隐藏域来进行维护。 可以使用视图状态在页回发到自身时跨越往返过程存储您自己的页特定值。例如,如果您的应用程序正在维护用户特定的信息(即,该信息在页上使用,但不是任何控件所必需的部分),则可以使用视图状态存储该信息。 使用视图状态的优点 不需要任何服务器资源 视图状态包含在页代码内的结构中。 实现简单 视图状态无需使用任何自定义编程。默认情况下对控件启用状态数据的维护。 增强的安全功能 视图状态中的值经过哈希计算和压缩,并且针对 Unicode 实现进行编码,其安全性要高于使用隐藏域。 使用视图状态的缺点 性能注意事项 由于视图状态存储在页本身,因此如果存储较大的值,用户显示页和发送页时的速度可能会减慢。尤其是对移动设备,其带宽通常是有限的。 设备限制 移动设备可能没有足够的内存容量来存储大量的视图状态数据。 潜在的安全风险 视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希格式存储数据,但它可以被篡改。如果直接查看页输出源,可以看到隐藏域中的信息,这导致潜在的安全性问题。 控件状态 ASP.NET 页框架提供了 ControlState 属性作为在服务器往返过程中存储自定义控件数据的方法。例如,如果您编写的自定义控件使用多个不同的选项卡来显示不同的信息,为使此控件能够按预期方式工作,控件需要知道在往返过程中哪个选项卡被选中。视图状态可用于此目的,但是开发人员可能在页级将视图状态关闭,这实际上破坏了您的控件。与视图状态不同,控件状态不能被关闭,因此它提供了存储控件状态数据的更可靠方法。 使用控件状态的优点 不需要任何服务器资源 默认情况下,控件状态存储在页上的隐藏域中。 可靠性 因为控件状态不像视图状态那样可以关闭,控件状态是管理控件的状态的更可靠方法。 通用性 可以编写自定义适配器来控制如何存储控件状态数据和控件状态数据的存储位置。 使用控件状态的缺点 需要一些编程 虽然 ASP.NET 页框架为控件状态提供了基础,但是控件状态是一个自定义的状态保持机制。为了充分利用控件状态,您必须编写代码来保存和加载控件状态。 隐藏域 可以在页上的隐藏域中存储特定于页的信息,作为维护页的状态的一种方式。 如果使用隐藏域,最好在客户端上只存储少量经常更改的数据。 注意 如果使用隐藏域,则必须使用 HTTP POST 方法向服务器提交页,而不是使用通过页 URL 请求该页的方法(HTTP GET 方法)向服务器提交页。 使用隐藏域的优点 不需要任何服务器资源 隐藏域在页上存储和读取。 广泛的支持 几乎所有浏览器和客户端设备都支持具有隐藏域的窗体。 实 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |