论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > Asp.net教程
Tag:静态页面,treeview,gridview,repeater,dataset,sqldatareader,ado.net,上传,三层,ajax,xml,留言本,新闻发布,商城,注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,触发器,socket,form认证,登录,视频教程

ASP.NET中的状态管理机制

文章类别:Asp.net | 发表日期:2009-10-19 10:31:37

为什么要状态管理
     B/S与C/S两种架构的有着完全不同的运行机制。C/S基本上所有的软件功能都在客户端(Client)中实现(所以C/S也称为胖客户端架构),服务器端(Server)只提供基础服务,最为典型的是数据库服务提供数据服务。而B/S架构主要的功能在服务端(Server)实现,客户端的浏览器(Browser)只接受用户输入和数据展现。C/S架构的功能都在客户端的一个进程中完成,客户端与服务器端的连接基本上保持同步,只需要记录两者的连接状态而不存在其他的状态要管理。
    而在B/S架构中,客户端和服务之间的连接并不保持同步。我们来看看B/S架构客户端与服务器端的交互方式。客户端浏览器每次将网页发送到服务器时,服务器都会创建网页类的一个新的实例。在传统的Web编程中(指那些没有提供内置的状态管理机制的B/S开发平台),这通常意味着在每一次往返过程中,与该页及该页上的控件相关联的信息都会丢失。如用户将信息输入到页面的文本框中,该信息从浏览器传到服务器的往返过程中将丢失,所以状态管理机制成为B/S架构的一个重点。如果我们要深入学习B/S结构,研究其状态管理机制成为必经之路而无法逾越,本文就来探讨当前市场最为流行的B/S架构——ASP.NET框架的状态管理机制。

什么是ASP.NET的状态管理
    那么什么是B/S架构的状态管理呢?说白了就是存储页面请求期间的信息,比如购物网站的客户信息或购物车的内容等等。为了解决传统Web编程的固有限制,减少Web开发者的工作量和工作难度,提高开发效率,ASP.NET平台提供了一系列状态选项,使开发者可以按页保留数据和在整个Web应用程序范围内保留数据。
    我们也知道在大型的网络应用中,同一个网站可能部署到多台服务器上,针对这种情况,ASP.NET也提供了分布式状态管理功能,使我们能够管理运行在数台服务器上的同一个Web应用程序的多个实例的状态信息。
    在Web应用的运行过程中,ASP.NET可以保存和管理Web应用级别(Application)、会话级别(Session)、页面级别(Page)、用户特定和开发人员自定义的信息。具体的来说,ASP.NET提供了如下状态管理选项:
1.     视图状态
2.     控件状态
3.     隐藏域
4.     Cookie
5.     查询字符串
6.     应用程序状态
7.     会话状态
8.     配置文件属性
    有些状态选项将数据保存在客户端,如视图状态、控件状态、隐藏域、Cookie和查询字符串。有些状态选项将数据保存在服务器内存中,如应用程序状态、会话状态和配置文件属性。我们将按照“基于客户端的状态管理选项”和“基于服务器的状态管理选项”来详细讲解各个状态管理选项。

基于客户端的状态管理选项
    基于客户端的状态管理选项只在页中或客户端计算机上存储信息,在各往返行程间不会在服务器上维护任何信息。
 1、视图状态(ViewState)
    视图状态提供一个字典对象,用于在对同一页的多个请求之间保留值。这是页用来在往返行程之间保留页和控件属性值的默认方法。在处理页时,页和控件的当前状态会散列为一个字符串,并在页中保存为一个隐藏域或多个隐藏域。当将页回发到服务器时,页会在页初始化阶段分析视图状态字符串,并还原页中的属性信息。
 2、 控件状态
    有时,为了让控件正常工作,需要按顺序存储控件状态数据。如,如果编写了一个自定义控件,其中使用了不同的选项卡来显示不同的信息。为了让自定义控件按预期的方式工作,该控件需要知道在往返行程之间选择了哪个选项卡。可以使用ViewState属性来实现这一目的,不过,开发人员可能会在页级别关闭视图状态,从而使控件无法正常工作。为了解决此问题,ASP.NET页框架在ASP.NET中公开了一项名为控件状态的功能。ControlState属性允许您保持特定于某个控件的属性信息,且不能像ViewState属性那样被关闭。
3、隐藏域
    在ASP.NET中可以将信息存储在HiddenField控件中,此控件将呈现为一个标准的HTML隐藏域。隐藏域在浏览器中看不到,但在开发过程中可以像对待标准控件一样设置属性。当向服务器提交页时,隐藏域的内容将在HTTP窗体集合中随同其他控件的值一起发送。隐藏域可用作一个储存库,可以将希望直接存储在页中的任何信息放置到其中。
    但恶意用户可以很容易查看和修改隐藏域的内容。所以不要在隐藏域中存储任何敏感信息或保障应用程序正确运行的信息。
     HiddenField控件在其Value属性中只存储一个变量,并且必须通过显式方式添加到页上。为了在页处理期间能够使用隐藏域的值,必须使用HTTP POST命令提交相应的页。如果在您使用隐藏域的同时,为了响应某个链接或HTTP GET命令而对页进行了相应处理,隐藏域将不可用。
4、Cookie
     Cookie是一些少量的数据,这些数据或者存储在客户端文件系统的文本文件中,或者存储在客户端浏览器会话的内存中。Cookie包含站点的信息,这些信息是随页一起由服务器发送到客户端的。Cookie可以是临时的(具有特定的过期时间和日期),也可以是永久的。
    可以使用Cookie来存储有关特定客户端、会话或应用程序的信息。Cookie保存在客户端上,当浏览器请求某页时,客户端会将Cookie中的信息连同请求信息一起发送。服务器可以读取Cookie并提取它的值。一项常见的用途是存储标记,以指示该用户已经在Web应用程序中进行了身份验证。
    浏览器只能将数据发送回最初创建该Cookie的服务器。但是,恶意用户可通过多种方法访问Cookie并读取其中的内容。建议不要将敏感信息(如用户名或密码)存储在Cookie中。可以在Cookie中存储一个标识用户的标记,然后使用该标记在服务器上查找敏感信息。
5、查询字符串
    查询字符串是在页URL的结尾附加的信息。下面是一个典型的查询字符串示例:http://www.test.com/test.aspx?name=book&price=100
    在上面的URL路径中,查询字符串以问号(?)开始,并包含两个属性/值对:一个名为“name”,另一个名为“price”。
    查询字符串提供了一种维护状态信息的方法,这种方法很简单,但有使用上的限制。例如,利用查询字符串可以很容易地将信息从一页传送到另一页。例如,将产品号从一页传送到将处理该产品号的另一页。但是,大多数浏览器和客户端设备会将URL的最大长度限制为2083个字符。
    在查询字符串中传递的信息可能会被恶意用户篡改。不要依靠查询字符串来传递重要的或敏感的数据。此外,用户可以创建URL的书签或将URL发送给其他用户,从而将这些信息与URL一起传递。
    若要在页处理期间可以使用查询字符串的值,必须使用HTTP GET命令提交页。也就是说,如果为了响应HTTP
POST命令而对页进行了相应处理,则不能利用查询字符串。

基于服务器的状态管理选项
     ASP.NET提供了多种方法,用于维护服务器上的状态信息,而不是保持客户端上的信息。通过基于服务器的状态管理,为了保留状态,可以减少发送给客户端的信息量,但它可能会使用服务器上高成本的资源。下面描述了三种基于服务器的状态管理功能:应用程序状态、会话状态及配置文件属性。
1、 应用程序状态(Application)
     ASP.NET使用应用程序状态来保存每个活动的Web应用程序的值,应用程序状态是HttpApplicationState类的一个实例对象。应用程序状态是一种全局存储机制,可在Web应用程序中的所有页面访问到。因此,应用程序状态可用于存储需要在服务器往返行程之间及页请求之间维护的信息。
    应用程序状态存储在一个键/值字典中,在每次请求一个特定的URL期间就会创建这样一个字典。可以将特定于应用程序的信息添加到此结构以在页请求期间存储它。一旦将应用程序特定的信息添加到应用程序状态中,服务器就会管理该对象。
2、 会话状态(Session)
     ASP.NET使用会话状态保存每个活动的Web应用程序会话的值,会话状态是HttpSessionState类的一个实例。
    会话状态与应用程序状态相似,不同的只是会话状态的范围限于当前的浏览器会话。如果有不同的用户在使用同一个Web应用程序,则每个用户会话都将有一个不同的会话状态。此外,如果同一用户在退出后又返回到应用程序,第二个用户会话的会话状态也会与第一个不同。
    会话状态采用键/值字典形式的结构来存储特定于会话的信息,这些信息需要在服务器往返行程之间及页请求之间进行维护。
    可以使用会话状态来完成以下任务:
1.     唯一标识浏览器或客户端请求,并将这些请求映射到服务器上的单独会话实例。
2.     在服务器上存储特定于会话的数据,以用于同一个会话内的多个浏览器或客户端请求。
3.     引发适当的会话管理事件。此外,可以利用这些事件编写应用程序代码。
    一旦将应用程序特定的信息添加到会话状态中,服务器就会管理该对象。根据指定的选项的不同,可以将会话信息存储在Cookie中 、进程外服务器中或运行Microsoft SQL Server的计算机中。
 3、 配置文件属性
     ASP.NET提供了一个称为配置文件属性的功能,可用来存储特定于用户的数据。此功能与会话状态类似,不同的是,在用户的会话过期时,配置文件数据不会丢失。配置文件属性功能使用ASP.NET配置文件,此配置文件以持久的格式存储,并与某个用户关联。ASP.NET配置文件可以用来轻松地管理用户信息,而无需创建和维护自己的数据库。此外,配置文件使用了一个强类型API,开发者可以在应用程序中的任何位置访问该API,从而使用用户信息。开发者可以在配置文件中存储任何类型的对象。ASP.NET配置文件功能提供了一个通用存储系统,使开发者能够定义和维护几乎任何类型的数据,同时仍可用类型安全的方式使用数据。
    若要使用配置文件属性,必须对配置文件提供程序进行配置。ASP.NET包括一个SqlProfileProvider类,使开发者能够将配置文件数据存储到SQL数据库中,但开发者也可以创建自己的配置文件提供程序类,用于以自定义格式将配置文件数据存储到自定义存储机制,如XML文件或Web服务。
    因为放置在配置文件属性中的数据没有存储到应用程序内存中,所以这些数据在Internet信息服务(IIS)重新启动或辅助进程重新启动后仍能得到保留,而不会丢失。此外,配置文件属性可以跨多个进程得到保持,例如在网络场或网络园中。

视频教程列表
文章教程搜索
 
Asp.net推荐教程
Asp.net热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058