【Asp.net精品源码栏目提醒】:网学会员为广大网友收集整理了,【精品】第6章 ASP.NET应用程序状态管理 - 中学课件,希望对大家有所帮助!
第6章
ASP.NET应用程序状态管理 对于一个Web应用程序来说,通常需要维护应用程序的状 态。
比如电子商务网站的购物车,当客户在多个页面中选择商 品时,需要为其维护一个所选商品的列表。
ASP.NET为解决 状态维护的问题提供了多种方法,本章将详细讨论如何使用这 些方法为
ASP.NET应用程序添加状态管理功能。
本章内容有: 状态管理简介 跨页传递消息 Cookie技术简介 Session会话状态简介 应用程序状态 6.1
ASP.NET状态管理简介 记得在使用ASP的时候,笔者为了保存每个文本框控件中的值信息,在数据提交前使用了大量的Session变量来保存每个文本框的值,并在页面重新生成后将这些会话变量中的值一一赋给每个控件。
这是一件相当费时费力的工作,可谓事倍功半。
在
ASP.NET最初推出以后,让笔者眼前一亮的是,当页面回发(Postback)后,控件依然能保存其输入的值,
ASP.NET使用ViewState技术,也称为视图状态为控件保存了状态信息。
6.2 ViewState视图状态 视图状态可以说是应用最为广泛的一种技术,几乎每个
ASP.NET服务器控件都具有EnableViewState属性,允许控件在页面回送时保存其属性值。
开发人员也可以使用Page.ViewState集合类添加自己的状态数据,可以使用这个属性保存简单的数据类型或者是自定义的对象类型。
6.2.1 视图状态原理 应用程序在运行时,
ASP.NET引擎会自动在源代码的尾部嵌入的一个隐藏域(HiddenField),命名为_VIEWSTATE。
6.2.2 在视图状态中存储对象 在ViewState中,可以存储用户自定义的对象数据,但是必须知道,当存储一个自定义对象时,
ASP.NET必须能够转换该对象为字节流以便于将对象添加到页面隐藏域中进行保存。
这意味着自定义对象必须支持序列化,否则
ASP.NET将会抛出异常。
6.2.3 视图状态的安全 ViewState中的数据以Base64编码的格式保存在客户端浏览器中,目前,可以使用很多工具解码Base64编码的字符串,例如可以使用一款名为ViewStateDecoder的工具来直接查看视图状态的数据结构。
6.3 跨页传递信息 使用视图状态有一个很大的限制就是不能跨页传递信息,如果用户导航到其他页面,那信息将会被丢失。
本节将讨论如何在多个页面之间传递信息,可以使用查询字符串或者是跨页提交技术。
如果这些技术都不能满足应用程序的要求,那么可以考虑使用cookies、会话状态或者是应用程状态,本章以后将会详细的讨论。
6.3.1 查询字符串 最常用的方法应该是在URL中使用查询字符串来传递信息,现今网络上多如牛毛的网站都使用这种技术来在页面之间传递信息。
6.3.2 跨页回送技术 Postback技术能够将页面发送到服务器并从服务器重新获取当前的页面,这个技术为在
ASP.NET中实现类似Windows桌面应用程序的响应效果提供了重大的作用。
跨页回送是postback技术的扩展,使PostBack能够跨越多个页面。
6.4 使用Cookie保存会话信息 当笔者第一次听到浏览器Cookie这个词时,对这个词充满了好感,Cookie中文称为小甜饼,总让人想象一些美好的东西。
但是后来几年,这个技术被一些冲满恶意的用户利用来收集用户敏感信息,造成了网民们对这个技术是又爱又恨。
越来越多的用户开始在浏览器中禁用Cookie,防止敏感信息被黑客盗取。
6.4.1 Cookie技术简介 Cookie 提供了一种在 Web 应用程序中存储用户特定信息(如历史记录或用户首选项)的方法。
Cookie 是一小段文本信息,随着请求和响应在 Web 服务器和客户端之间传递。
Cookie 包含每次用户访问站点时 Web 应用程序都可以读取的信息,这种技术将在客户端硬盘上创建一些文件来存放用户信息,这些文件一般存储在Internet临时文件夹中,图6.6是笔者的机器上的Cookie文件。
6.4.2 使用Cookie保存信息
ASP.NET中可以使用Response对象向浏览器发送Cookie,Request对象获取Cookie,这两个对象都具有一个名为Cookies的集合属性,该集合以名/值对的形式保存Cookie信息。
每个Cookie必须具有一个唯一的名称,以便于浏览器进行识别,如果浏览器检测到具有相同名称的Cookie,则会覆盖其中的一个。
6.5 会话状态 会话状态是
ASP.NET中非常重要的状态管理技术,同时也是功能很强大的状态管理技术。
会话状态允许信息存储在一个页面被能被其他页面进行访问。
会话状态支持标准数据类型和任何派生自object的类型,比如用户自定义的类型。
会话状态使用与ViewState类似的集合语法,不同点之处只在于其名称上,会话状态使用Session,而视图状态使用ViewState。
6.5.1 会话状态简介 由于必须为每个用户维护一个会话状态,
ASP.NET将会为每个新用户请求创建一个唯一的会话ID。
这个会话ID使用了唯一的120位标识符,
ASP.NET使用一种保密的算法来生成这个值以保证这个值的唯一性。
当客户端持有一个会话ID,
ASP.NET将搜寻相应的会话,提取用户在会话中存储的对象,放入一个指定的集合中让用户进行访问。
6.5.2 使用会话状态 为了访问或者是存取会话状态,可以使用Page.Session属性,这是一个System.Web.SessionState.HttpSessionState类型的集合对象,使用的方式与本章前面视图状态的方式相似。
6.5.3 配置会话状态
ASP.NET允许开发人员在web.config配置当前应用程序的会话状态,可以在这个文件中配置一些较高级的会话状态选项。
web.config有一个名为sessionState的配置块,在该块中提供了很多与Session相关的配置选择,一个简单的sessionState配置块的代码如下所示。
6.6 应用程序状态 应用程序状态是指在整个应用程序范围内可被任何客户端进行访问的一些全局对象。
应用程序状态基于System.Web.HttpApplicationState类,可以在任何位置使用Page类内置的Application对象来访问应用程序对象。
6.7 小结 本章讨论了
ASP.NET中的状态管理技术,首先介绍了
ASP.NET引入的视图状态,介绍了视图状态的原理,如何在视图状态中存储自定义对象以及视图状态的安全性。
接下来讨论了如何在多个页面中传递信息,讨论了如何使用查询字符串,如何使用跨页回送技术让页面回送到其他页面。
6.4节讨论了使用Cookie技术保存会话信息,并介绍了会话状态和应用程序状态这两种服务器端的状态维护技术。
6.8 常见面试题6.8.1 请简述ViewState的功能和实现机制 ViewState用来存储页面范围内的数据,以保证用户在 离开页面之前数据的持续性。
ViewState机制的实现并不复杂。
简单来说,每次服务器 发送给客户端的页面中,都隐藏了一个数据,该数据就用以 保存ViewState,可以想象,当客户端再次提交表单时, ViewState就会又随着表达一起提交到服务器端,循环往复就 达到了持续保存数据的功能。
6.8.2 Session有哪几种存储方式,之间有何 区别,如何进行设置Session数据一共有4种存储方式,分别为: 存储在IIS进程中 存储在状态服务器中 存储在SQL Server数据库中 存储在自定义程序中除了准备必要的服务外(如SQL Server数据库服务器), 还需要配置站点的web.config文件进行设置。
上一篇:
软件技术专业论坛设计(精品)
下一篇:
应用数学学报编辑部联系方式