《web应用的状态管理》由会员分享,可在线阅读,更多相关《web应用的状态管理(55页珍藏版)》请在金锄头文库上搜索。
1、第6章 Web应用的状态管理内容Web应用状态概述客户端状态维护技术服务器端状态维护技术Web应用状态概述Web应用本质上是无状态的,如需保存状态则需要做状态管理 ,状态维护是对同一页或不同页的多个请求维护状态和页信 息的过程 客户端状态维护技术视图状态控件状态隐藏域Cookie查询字符串视图状态视图状态概述设置页面是否保留视图状态在配置文件设置是否保留视图状态演示和练习:设置是否启用保留视图状态对视图状态进行分块演示和练习:对视图状态进行分块视图状态概述视图状态(ViewState)是一个字典对象,通过Page类的 ViewState属性公开,是页用来在往返行程之间保留页和控件 属性值的默认
2、方法视图状态可存储的数据类型: u字符串 u整数 u布尔值 uArray 和ArrayList 对象 u哈希表 u自定义类型转换器ViewState“view1“ = “Hello World“;设置页面是否保留视图状态设置Page指令或Page的EnableViewState属性指示当 前页请求结束时,该页是否保持其视图状态以及它 包含的任何服务器控件的视图状态 关闭页面的视图状态设置页面是否保留视图状态(例)关闭页面的视图状态protected void Page_Load(object sender, EventArgs e)Page.EnableViewState = false;在配
3、置文件中设置是否保留视图状态在配置文件Web.config的system.web节点下,修改 Pages元素的EnableViewState属性,来控制所有页面 是否启用视图状态信息 演示和练习:设置是否启用视图状态多媒体演示对视图状态进行分块 设置页的 MaxPageStateFieldLength 属性,对 ViewState 属性中存储的数据进行分块,可以在 Web.config文件中设置分块大小演示和练习:对视图状态进行分块多媒体演示控件状态ASP.NET 页框架提供了 ControlState 属性作为在服务 器往返过程中存储自定义控件数据的方法控件状态不能被关闭,故存储控件状态数据
4、是更可 靠的方法隐藏域隐藏域是一个存储库,直接存储在页中的任何特定 于页的信息,在视图状态、会话状态和 Cookie 等方 法被禁用或不可用,则可以使用 HiddenField 控件来 存储状态值 隐藏域的设置和读取protected void Page_Load(object sender, EventArgs e) string strUserName = “Jakey“;h1.Value = strUserName; CookieCookie概述编写Cookie演示和练习:编写Cookie编写多值Cookie演示和练习:编写多值Cookie控制Cookie的范围演示和练习:控制Cooki
5、e的范围修改和删除Cookie演示和练习:删除Cookie和删除多值Cookie的子键Cookie和会话状态Cookie概述Cookie 是存储在客户端文件系统的文本文件中,或 者存储在客户端浏览器会话的内存中的少量的数据Cookie 是随页输出并由服务器发送到客户端的特定 于站点的信息Cookie 可以是临时的(随着浏览器关闭而自动消失 ),也可以是永久性的Cookie 保存在客户端设备上,当浏览器请求某页时 ,客户端会将 Cookie 中的信息连同请求信息一起发 送。服务器可以读取 Cookie 的值编写Cookie使用HttpResponse 对象 来设置Cookie,需要设置 Cook
6、ie名称、值、过期时间等信息/通过新建HttpCookie对象来添加Cookie HttpCookie aCookie = new HttpCookie(“lastVisit“);/新建HttpCookie对象 aCookie.Value = DateTime.Now.ToString(); aCookie.Expires = DateTime.Now.AddDays(1);/设置Cookie的过期 Response.Cookies.Add(aCookie);/将Cookie添加到Cookies集合/读取Cookie值 string userName; if (Request.Cookies“
7、userName“ != null)userName = Request.Cookies“userName “.Value; 演示和练习:编写Cookie多媒体演示编写多值Cookie在一个 Cookie 中存储多个名称/值对,名称/值对称 为子键/直接添加Cookie Response.Cookies“userInfo“userName“ = “patrick“; Response.Cookies“userInfo“lastVisit“ = DateTime.Now.ToString(); Response.Cookies“userInfo“.Expires = DateTime.Now.A
8、ddDays(1);/读取Cookie值 string userName; if (Request.Cookies“userName“ != null)if (Request.Cookies“userInfo“ “userName“ != null)userName = Request.Cookies“userInfo“userName “; 演示和练习:编写多值Cookie多媒体演示控制Cookie的范围限制 Cookie 的域范围将 Cookie 限制到某个文件夹或应用程序 控制Cookie的范围限制 Cookie 的域范围Response.Cookies“domain“.Value =
9、DateTime.Now.ToString(); Response.Cookies“domain“.Expires = DateTime.Now.AddDays(1); Response.Cookies“domain“.Domain = “support. “;控制Cookie的范围将 Cookie 限制到某个文件夹或应用程序HttpCookie appCookie = new HttpCookie(“AppCookie“); appCookie.Value = “written “ + DateTime.Now.ToString(); appCookie.Expires = DateTime
10、.Now.AddDays(1); appCookie.Path = “/App1“; Response.Cookies.Add(appCookie);演示和练习:控制Cookie的范围多媒体演示修改和删除Cookie由于Cookie存储在客户端,不能直接修改和删除 Cookieu通过给Cookie赋新值替换旧版本Cookie的办法来 修改u可以通过设置Cookie立即过期的办法来删除 Cookie演示和练习:删除Cookie和删除多值Cookie的子键多媒体演示Cookie和会话状态服务器在用户访问时为每个用户建立唯一的会话, 该会话将一直延续到用户访问结束,ASP.NET通过 以下办法维护该
11、会话状态u存储在Cookie中的非永久性会话状态 u存储在站点中页面的 URL 中的无Cookie会话查询字符串查询字符串提供了一种维护状态信息的方法 ,输入 查询字符串以问号 (?) 开始的属性/值对,且可以有 多个查询字符串,它们之间以“ Application“TotalCounter“ = (int)Application“TotalCounter“)+1; Application.UnLock();int totalCounter = (int)Application.Get(“TotalCounter”); /访问变量值 Application.Set(“TotalCounter”
12、,10); /直接设置变量值演示和练习:使用应用程序状态来存储信息多媒体演示删除应用程序状态的值调用HttpApplicationState类的Clear或RemoveAll方法 ,删除应用程序状态集合中的所有变量调用Remove或RemoveAt方法来清除某一个变量 Application.Remove(“TotalCounter”);/通过传递变量名来删除 Application.RemoveAt(0); /通过传递序号来删除会话状态会话状态概述会话标识符会话状态事件会话状态模式使用会话状态演示和练习:实现简单的站点计数器功能实现自定义会话状态提供程序会话状态概述会话状态保存每个活动的 W
13、eb 应用程序会话的值, 是 System.Web.SessionState.HttpSessionState 类的一 个实例,通过Page等类的Session属性公开会话状态采用键/值字典形式的结构来存储特定于会 话的信息,这些信息需要在服务器往返行程之间及 页请求之间进行维护 会话状态限制在当前浏览器中有效,用来存储短期 、敏感的数据会话标识符浏览器的会话使用存储在 SessionID 属性中的唯一 标识符进行标识会话 ID 使 ASP.NET 应用程序能够将特定的浏览器与 Web 服务器上相关的会话数据和信息相关联会话 ID 的值在浏览器和 Web 服务器间通过 Cookie 进行传输,
14、如果指定了无 Cookie 会话,则通过 URL 进行传输 会话标识符无Cookie的SeesionIDu将Web.config 文件的 sessionState 节的 cookieless 属性设置为 true,可以指定不将会话 标识符存储在 Cookie 中,而是存储在URL中 http:/localhost:1387/Demo_7/(S(hfohsn45do20gt55wuemca55)/Default.aspx会话标识符会话标识符自定义会话标识符u自定义类来提供和验证 SessionID 值,继承 SessionIDManager 类,然后用自定义的实现来重 写 CreateSessi
15、onID 和 Validate 方法 u创建实现 ISessionIDManager 接口的类来替换整 个 SessionIDManager 会话状态事件在Global.asax文件编写用于管理用户会话的事件:uSession_OnStart 事件:在新会话开始时触发uSession_OnEnd 事件:在会话被放弃或过期时触 发 会话状态模式会话状态模式概述uASP.NET 会话状态支持若干用于会话数据的存 储选项u在 Web.config 文件中为 sessionState 元素的 mode 属性分配一个 SessionStateMode 枚举值, 可以指定ASP.NET 会话状态使用的模式
16、会话状态模式InProc模式(进程内模式)u是默认会话状态模式,使用SessionStateMode枚 举的InProc值指定u进程内模式将会话状态值和变量存储在本地 Web 服务器上的内存中u是唯一支持 Session_OnEnd 事件的模式会话状态模式StateServer模式(状态服务器模式)u会话状态存储在一个称为 ASP.NET 状态服务的 进程中,该进程是独立于 ASP.NET 辅助进程或 IIS 应用程序池的单独进程u使用此模式可以确保在重新启动 Web 应用程序 时保留会话状态,并使会话状态可用于网络场 中的多个 Web 服务器 会话状态模式SQL Server模式u会话状态存储到一个 SQL Server 数据库中u可以确保在重新启动 Web 应