1、应用程序状态的概念;
(1)状态的含义:
状态就是系统运行过程中的数据信息;
应用系统运行过程中需要的数据信息成为应用程序状态;
会话过程中需要的数据信息称为会话状态,一个客户会话包括客户开始使用系统到使用系统完成的整个过程;
对象生命周期需要的数据信息称为对象的状态(对象的状态可以使用成员变量表示);
(2)Http无状态的协议:
Http协议是无状态的;
页面只有有限的生命周期;
请求-应答,应答完成,页面也就销毁(只是对于的页面对象在内存中销毁,页面本身是不删除的);
在ASP.NET中,页面是通过对象来表示,页面的生命周期也就是页面对象(Page类的对象)的生命周期,因此页面对象只有有限的生命周期;
对象的状态信息(对象的成员变量)在对象销毁后即不存在;
eg:当再次单击按钮时,客户端再次向服务器发起请求这个页面,服务器会重新生成这个页面对象(和之前的是两个不同的页面对象,之前的那个旧的页面对象已经不存在了,已经被销毁了);Http是无状态的,两次单击提交按钮时(即两次提交页面时),第一次提交的页面属性值丢失。
(3)状态管理的重要性:
- 存储状态信息的必要性:
系统运行期间需要一些运行期间有效的数据信息;
会话期间需要用户会话过程中的数据信息,比如购物车信息;
页面之间需要传递数据; - ASP.NET状态管理:
Http协议是无状态的;
要完成状态管理需要采用ASP.NET状态管理方法;
(4)ASP.NET状态管理技术:
服务器端状态管理技术:
- 应用程序状态:Applicaion对象;
- 会话状态:Session对象;
- 页面之间的状态信息传递(信息传递):请求字符串;
- 对象的缓存技术(延缓对象的生命周期,提高应用系统的性能);
客户端状态管理技术:
- Cookie技术;
- 隐藏域 ;
(5)ASP.NET客户端状态管理技术详解
主要介绍Cookie;
到底什么是Cookie?
Cookie:上网的过程中,很多网站会在我们的电脑上存储一些信息,这些信息就是Cookie;
Cookies用于在客户机上存储小段信息。Cookies是很小的文本文件,通常存储在此访问某个站点时使用的永久数据
这些数据可以是用户喜好、用户登录标记、用户上次浏览站点的时间等等。
简单地说,Cookies包含的信息允许Web服务器根据访问历史来识别用户。这样的信息只允许创建它们的站点读取。
Cookie是一个小文本文件,用户可以修改,因此用户可能发送一个欺骗服务器的Cookie;
Cookie是可以设置过期时间的;
使用Cookie进行用户的状态管理,只是用来存储一些不重要的信息,一些重要的信息不应该存储在客户端,应该存储在服务器端;
使用Cookie实现状态管理:
HttpCookie类提供创建和操作各 HTTP Cookie 的类型安全方法(一个Cookie用一个HttpCookie类对象表示,多个Cookie就用HttpCookieCollection类对象表示)
HttpCookie 类获取和设置各 Cookie 的属性。
HttpCookieCollection类提供存储、检索和管理整个 Web 应用程序的所有 Cookie 的方法
Response对象和Request对象包含Cookies属性,该属性就是HttpCookieCollection类的实例
ASP.NET 代码使用内部的 Cookies 对象来创建 Cookie 并将其添加到 Cookie 集合中
案例:使用Cookie做网站访问次数统计;
(6)ASP.NET服务器端状态管理技术详解
会话级别、应用程序级别;
会话的全过程;
Session对象为内置对象,由ASP.NET自动创建,存储为键值对的集合,在整个会话期间均有效;
应用程序级别的状态管理:
公开对象的键值对,可以使用其来存储对象和与来自多个客户端的多个web请求相关的标量值;
任何客户端首次在特定 ASP.NET 应用程序的虚拟目录命名空间中请求 URL 资源时,都将创建 HttpApplicationState 类的实例;
应用程序状态的同步:
应用程序状态信息可能会被多个用户同时访问和修改,导致冲突发生,因此应用程序状态同步非常重要;
HttpApplicationState 类提供两种方法 Lock 和 Unlock,一次只允许一个线程访问应用程序状态变量
对 Application 对象调用 Lock 会导致 ASP.NET 阻止运行在其他辅助线程上的代码试图访问应用程序状态中的任何对象
只有当调用 Lock 的线程对 Application 对象调用相应的 Unlock 方法时才解除对这些线程的阻塞。
应用程序和会话过程中的事件:
全局类文件,事件处理程序放在应用程序专用的一个文件Global.asax中
,定义应用程序和会话过程中的事件;
事件框架默认生成,事件如下:
Application_Start
Application_End
Application_Error
Session_Start
Session_End
案例:网站计数;
(7)缓存技术
输出缓存、片段缓存、数据缓存