ASP应用程序状态管理.ppt

上传人:牧羊曲112 文档编号:6501800 上传时间:2023-11-07 格式:PPT 页数:18 大小:202.50KB
返回 下载 相关 举报
ASP应用程序状态管理.ppt_第1页
第1页 / 共18页
ASP应用程序状态管理.ppt_第2页
第2页 / 共18页
ASP应用程序状态管理.ppt_第3页
第3页 / 共18页
ASP应用程序状态管理.ppt_第4页
第4页 / 共18页
ASP应用程序状态管理.ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《ASP应用程序状态管理.ppt》由会员分享,可在线阅读,更多相关《ASP应用程序状态管理.ppt(18页珍藏版)》请在三一办公上搜索。

1、第6章 ASP.NET应用程序状态管理,如果读者曾经有过开发Windows应用程序的经验,可能不太会留意维护应用程序状态,因为应用程序本身就在客户端运行,可以直接在内存中维护其应用程序状态。但是对于ASP.NET应用程序来说,事情不那么简单了,因为ASP.NET应用程序在服务器端运行,客户端使用无状态的HTTP协议对ASP.NET应用程序发出请求,ASP.NET应用程序响应用户请求,向客户端发送请求的HTML代码,服务器并不会维护任何客户端状态。考虑一个有着成千上万并发用户的服务器,如果为每个用户都维护状态的话会耗费非常多的资源。对于一个Web应用程序来说,通常需要维护应用程序的状态。比如电子

2、商务网站的购物车,当客户在多个页面中选择商品时,需要为其维护一个所选商品的列表。ASP.NET为解决状态维护的问题提供了多种方法,本章将详细讨论如何使用这些方法为ASP.NET应用程序添加状态管理功能。,6.1 ASP.NET状态管理简介,由于使用无状态的HTTP协议作为Web应用程序的通信协议,当客户端每次请求页面时,ASP.NET服务器端都将重新生成一个网页的新实例。这意味着客户端用户在浏览器中的一些状态或者是一些修改都将丢失。比如一个客户管理系统,用户在很多文本框中输入了内容,当点击提交按钮到服务器后,从服务器返回的将是一个全新的网页,用户所添加的内容将全部丢失。记得在使用ASP的时候,

3、笔者为了保存每个文本框控件中的值信息,在数据提交前使用了大量的Session变量来保存每个文本框的值,并在页面重新生成后将这些会话变量中的值一一赋给每个控件。这是一件相当费时费力的工作,可谓事倍功半。在ASP.NET最初推出以后,让笔者眼前一亮的是,当页面回发(Postback)后,控件依然能保存其输入的值,ASP.NET使用ViewState技术,也称为视图状态为控件保存了状态信息,ASP.NET中提供了如下几大用于状态管理的技术:,6.2 ViewState视图状态,视图状态可以说是应用最为广泛的一种技术,几乎每个ASP.NET服务器控件都具有EnableViewState属性,允许控件在

4、页面回送时保存其属性值。开发人员也可以使用Page.ViewState集合类添加自己的状态数据,可以使用这个属性保存简单的数据类型或者是自定义的对象类型。例如可以使用视图状态保存一个计数器的值,代码如下:protected void Page_Load(object sender,EventArgs e)ViewStateCounter=5;可以看到ViewState是一个字典类型的对象,使用ViewStatekey=value的格式来设置值,如果在集合中存在指定键的值,则进行替换,否则将自动创建一个新的键值对。,6.2.1 视图状态原理,应用程序在运行时,ASP.NET引擎会自动在源代码的尾

5、部嵌入的一个隐藏域(HiddenField),命名为_VIEWSTATE。_VIEWSTATE以键/值对集合的形式保存页面中控件的状态数据,_VIEWSTATE将这些值以Base64编码格式编码字符串,如下代码所示:,6.2.2 在视图状态中存储对象,在ViewState中,可以存储用户自定义的对象数据,但是必须知道,当存储一个自定义对象时,ASP.NET必须能够转换该对象为字节流以便于将对象添加到页面隐藏域中进行保存。这意味着自定义对象必须支持序列化,否则ASP.NET将会抛出异常。下面创建一个名为ViewStateSample的ASP.NET Web站点,右击网站项目名称,选择“添加新项”

6、菜单项,添加一个新的类,命名为Book.cs,如图所示:,6.2.3 视图状态的安全,ViewState中的数据以Base64编码的格式保存在客户端浏览器中,目前,可以使用很多工具解码Base64编码的字符串,例如可以使用一款名为ViewState Decoder的工具来直接查看视图状态的数据结构,如图所示。,6.3 跨页传递信息,使用视图状态有一个很大的限制就是不能跨页传递信息,如果用户导航到其他页面,那信息将会被丢失。本节将讨论如何在多个页面之间传递信息,可以使用查询字符串或者是跨页提交技术。如果这些技术都不能满足应用程序的要求,那么可以考虑使用cookies、会话状态或者是应用程状态,本

7、章以后将会详细的讨论。,6.3.1 查询字符串,最常用的方法应该是在URL中使用查询字符串来传递信息,现今网络上多如牛毛的网站都使用这种技术来在页面之间传递信息。例如如果从每一个页面上获取了当前用户的用户ID,希望在第二个页面上显示关于此ID的详细信息,可以使用如下的查询字符串:http:/=1002可以看到查询字符串是URL的一部分,以一个问号开始,可以使用/=1002&PartName=MKT&RoleNum=1,6.3.2 跨页回送技术,Postback技术能够将页面发送到服务器并从服务器重新获取当前的页面,这个技术为在ASP.NET中实现类似Windows桌面应用程序的响应效果提供了重

8、大的作用。跨页回送是postback技术的扩展,使PostBack能够跨越多个页面。ASP.NET的中大多数按钮控件都提供了一个名为PostBackUrl的属性,该属性定义在IButtonControl接口中,任何实现了该接口的控件比如ImageButton、LinkButton和Button控件都具有这个属性用来实现控页回送。只要为按钮控件的PostBackUrl指定另一个Web页面的Url,当用户点击按钮时,页面将被回送到新的Url页面,回送的页面中将包括原来页面中所有的输入控件的值。,6.4 使用Cookie保存会话信息,当笔者第一次听到浏览器Cookie这个词时,对这个词充满了好感,C

9、ookie中文称为小甜饼,总让人想象一些美好的东西。但是后来几年,这个技术被一些冲满恶意的用户利用来收集用户敏感信息,造成了网民们对这个技术是又爱又恨。越来越多的用户开始在浏览器中禁用Cookie,防止敏感信息被黑客盗取。,6.4.1 Cookie技术简介,Cookie 提供了一种在 Web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。Cookie 是一小段文本信息,随着请求和响应在 Web 服务器和客户端之间传递。Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,这种技术将在客户端硬盘上创建一些文件来存放用户信息,这些文件一般存储在Internet临时文

10、件夹中,图6.6是笔者的机器上的Cookie文件。由于Cookie信息是保存在客户端的文件中,只要用户没有清除浏览器端的Cookie文件,当以后再次请求站点中的页面时,浏览器便会在本地硬盘上查找与该Url关联的Cookie,如果Cookie存在,会将该请求与Cookie一起发送到站点。Cookie文件中保存的是文本信息,而且具有4096个字节的限制,很容易被不怀好意的用户进行截取而造成资源的外泄。因此在开发应用程序时,对于一些机密性强的信息,比如银行卡账号等,不要使用Cookie技术来保存。,6.4.2 使用Cookie保存信息,ASP.NET中可以使用Response对象向浏览器发送Cook

11、ie,Request对象获取Cookie,这两个对象都具有一个名为Cookies的集合属性,该集合以名/值对的形式保存Cookie信息。每个Cookie必须具有一个唯一的名称,以便于浏览器进行识别,如果浏览器检测到具有相同名称的Cookie,则会覆盖其中的的一个。,6.5 会话状态,会话状态是ASP.NET中非常重要的状态管理技术,同时也是功能很强大的状态管理技术。会话状态允许信息存储在一个页面被能被其他页面进行访问。会话状态支持标准数据类型和任何派生自object的类型,比如用户自定义的类型。会话状态使用与ViewState类似的集合语法,不同点之处只在于其名称上,会话状态使用Session

12、,而视图状态使用ViewState。会话状态是特定于用户的,当一个用户开始访问Web应用程序时,将会产生一个会话状态。不同的用户具有不同的会话状态,如果有1万个用户,将会有1万个用户状态。会话状态在存储与用户相关的信息方面非常有用,比如购特网站的购物车就可以使用会话状态来进行存储。必须注意的是使用会话状态并不是无偿的,会话状态需要维护每个用户的信息,这将需要消耗大量的服务器端资源。,6.5.1 会话状态简介,由于必须为每个用户维护一个会话状态,ASP.NET将会为每个新用户请求创建一个唯一的会话ID。这个会话ID使用了唯一的120位标识符,ASP.NET使用一种保密的算法来生成这个值以保证这个

13、值的唯一性。当客户端持有一个会话ID,ASP.NET将搜寻相应的会话,提取用户在会话中存储的对象,放入一个指定的集合中让用户进行访问。必须注意的是会话状态是保存在服务器端的,这与前面所讲的几种状态维护类型都不相同,为了保证会话状态的安全性,ASP.NET会话状态将不会直接保存在客户端。会话状态可以使用多种方式进行存储,ASP.NET提供了一个名为状态提供者的机制,让开发人员可以指定要存储会话的类型,比如可以指定存储到服务器端内存,SQL SERVER,专门的状态服务器等等,可以在web.config配置文件中配置会话状态。,6.5.2 使用会话状态,为了访问或者是存取会话状态,可以使用Page

14、.Session属性,这是一个类型的集合对象,使用的方式与本章前面视图状态的方式相似,例如下面的代码使用Session属性存储一个DataSet对象,并从Session中获取DataSet对象,代码如下:SessionmyDataSet=DataSetObject;DataSetObject=(DataSet)SessionmyDataSet;会话状态对当前用户来说是全局性的,不论用户访问哪个页面,都可以获取存储在会话状态中的信息。但是必须注意,有如下几个选项将会导致会话状态丢失:用户关闭并重新启动了浏览器。用户使用不同的浏览器访问相同的页面,浏览器不同将具有不同的处理会话的方式,因此也会导致

15、会话状态的丢失。,6.5.3 配置会话状态,ASP.NET允许开发人员在web.config配置当前应用程序的会话状态,可以在这个文件中配置一些较高级的会话状态选项。web.config有一个名为sessionState的配置块,在该块中提供了很多与Session相关的配置选择,一个简单的sessionState配置块的代码如下所示:下面来分别对这些配置节进行详细的讨论:1Cookieless使用Cookie保存会话ID2Timeout指定应用程序会话超时时间3cookieName用于指定存储会话ID的Cookie名称4mode用于指定会话状态值的位置,6.6 应用程序状态,应用程序状态是指在

16、整个应用程序范围内可被任何客户端进行访问的一些全局对象。应用程序状态基于类,可以在任何位置使用Page类内置的Application对象来访问应用程序对象。应用程序状态的使用方式与Session基本一致,都支持相同的对象类型,信息都保存在服务器上,并且使用一致的基于字典的语法。使用应用程序变量的一个常见的例子是网页计数器,,6.7 小结,本章讨论了ASP.NET中的状态管理技术,首先介绍了ASP.NET引入的视图状态,介绍了视图状态的原理,如何在视图状态中存储自定义对象以及视图状态的安全性。接下来讨论了如何在多个页面中传递信息,讨论了如何使用查询字符串,如何使用跨页回送技术让页面回送到其他页面。6.4节讨论了使用Cookie技术保存会话信息,并介绍了会话状态和应用程序状态这两种服务器端的状态维护技术。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号