《应用的状态》PPT课件.ppt

上传人:牧羊曲112 文档编号:5505723 上传时间:2023-07-14 格式:PPT 页数:58 大小:613.50KB
返回 下载 相关 举报
《应用的状态》PPT课件.ppt_第1页
第1页 / 共58页
《应用的状态》PPT课件.ppt_第2页
第2页 / 共58页
《应用的状态》PPT课件.ppt_第3页
第3页 / 共58页
《应用的状态》PPT课件.ppt_第4页
第4页 / 共58页
《应用的状态》PPT课件.ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《《应用的状态》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《应用的状态》PPT课件.ppt(58页珍藏版)》请在三一办公上搜索。

1、第5章Web应用的状态管理,内容,Web应用状态概述客户端状态维护技术服务器端状态维护技术,HTTP协议“无状态的协议”,Web服务器每分钟对上千个用户进行管理的一种方式就是执行所谓的“无状态”连接。只要有一个希望浏览器返回一个页面、图像或其他资源的请求,就发生以下事情:连接到服务器告诉服务器想要的页面、图像或其他项服务器发送请求资源服务器切断连接,把用户忘得干干净净。,ASP.Net Web Form的“连续”和“有状态”的假象,ASP.NET的设计者们,从实际访问者的角度重新考虑了这一过程:访问者打开一个页面,点击一个按钮,看到新的画面这一切似乎都是连续的。,状态管理,Web应用本质上是无

2、状态的,如需保存状态则需要做状态管理,状态维护是对同一页或不同页的多个请求维护状态和页信息的过程,保持用户信息(状态)的连续性。,状态管理,状态维护技术,视图状态:使用一个或多个隐藏域来保存控件的状态。控件状态:当开发自定义控件时,保存控件的状态数据。隐藏域:标准的HTML隐藏域。Cookie:用于在客户端保存少量的数据。查询字符串:查询字符串是在页URL的结尾附加的信息。应用程序状态:用于保存服务器端的全局应用程序信息。会话状态:保存会话状态信息。配置文件属性:ASP.NET提供了一个称为配置文件属性的功能,可以保存服务器端的全局应用程序信息。,客户端状态管理,客户端状态管理不如服务器端状态

3、管理选项安全不如服务器端管理选项可靠可存储的信息量可能受到限制,用户可以删除 Cookie,恶意的用户可通过某些方法来篡改 或读取其中的内容,服务器端状态管理,可通过应用程序状态(Application)、会话状态(Session)、配置文件、数据库保存会话状态来实现,客户端状态维护技术,视图状态隐藏域查询字符串Cookie,视图状态,视图状态概述设置页面是否保留视图状态在配置文件设置是否保留视图状态,设置页面是否保留视图状态,设置Page指令或Page的EnableViewState属性指示当前页请求结束时,该页是否保持其视图状态以及它包含的任何服务器控件的视图状态 关闭页面的视图状态,设置

4、页面是否保留视图状态(例),关闭页面的视图状态,protected void Page_Load(object sender,EventArgs e)Page.EnableViewState=false;,在配置文件中设置是否保留视图状态,在配置文件Web.config的system.web节点下,修改Pages元素的EnableViewState属性,来控制所有页面是否启用视图状态信息,对视图状态进行分块,设置页的 MaxPageStateFieldLength 属性,对ViewState 属性中存储的数据进行分块,可以在Web.config文件中设置分块大小,使用视图状态存取数据,视图状态

5、(ViewState)是一个字典对象,通过Page类的ViewState属性公开,是页用来在往返行程之间保留页和控件属性值的默认方法(只在本页有效)视图状态可存储的数据类型:字符串;整数;布尔值;Array 和ArrayList 对象;哈希表;自定义类型转换器,ViewStateview1=Hello World;,【例5-1】视图状态示例程序。,参见示例第05章ClientStateDemoViewStateDemo.aspx,使用视图状态具有以下3个优点:耗费的服务器资源较少(与Application、Session相比)。因为,视图状态数据都写入了客户端计算机中。易于维护。默认情况下,.

6、NET系统自动启用对控件状态数据的维护。增强的安全功能。视图状态中的值经过哈希计算和压缩,并且针对Unicode实现进行编码,其安全性要高于使用隐藏域。,使用视图状态具有以下3个缺点:性能问题。由于视图状态存储在页本身,因此如果存储较大的值,用户显示页和发送页时的速度可能减慢。设备限制。移动设备可能没有足够的内存容量来存储大量的视图状态数据。因此,对于移动设备上的服务器控件,将使用其它的实现方法。潜在的安全风险。视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希格式存储数据,但它可以被篡改。如果在客户端直接查看页源文件,可以看到隐藏域中的信息,这导致潜在的安全性问题。,隐藏域,隐藏域是

7、一个存储库,直接存储在页中的任何特定于页的信息,在视图状态、会话状态和 Cookie 等方法被禁用或不可用,则可以使用 HiddenField 控件来存储状态值 隐藏域的设置和读取,protected void Page_Load(object sender,EventArgs e)string strUserName=Jakey;h1.Value=strUserName;,查询字符串,查询字符串提供了一种维护状态信息的方法,输入查询字符串以问号(?)开始的属性/值对,且可以有多个查询字符串,它们之间以“&”分隔,http:/=basic&price=100,【例5-2】演示查询字符串的使用。

8、,参见示例第05章ClientStateDemoQueryString.aspx和Hello.aspx,使用查询字符串的优点:不需要任何服务器资源。查询字符串包含在对特定URL的HTTP请求中。广泛的支持。几乎所有的浏览器和客户端设备均支持使用查询字符串传递值。实现简单。ASP.NET完全支持查询字符串方法,其中包含了使用HttpRequest对象的Params属性读取查询字符串的方法。使用查询字符串的缺点:潜在的安全性风险。用户可以通过浏览器直接看到查询字符串中的信息。用户可将此URL设置为书签或发送给别的用户,从而通过此URL传递查询字符串中的信息。有限的容量。有些浏览器和客户端设备对UR

9、L的长度有2083个字符的限制。,Cookie,Cookie概述编写Cookie演示和练习:编写Cookie编写多值Cookie演示和练习:编写多值Cookie控制Cookie的范围演示和练习:控制Cookie的范围修改和删除Cookie演示和练习:删除Cookie和删除多值Cookie的子键Cookie和会话状态,Cookie概述,Cookie 是存储在客户端文件系统的文本文件中,或者存储在客户端浏览器会话的内存中的少量的数据Cookie 是随页输出并由服务器发送到客户端的特定于站点的信息Cookie 可以是临时的(随着浏览器关闭而自动消失),也可以是永久性的Cookie 保存在客户端设备上

10、,当浏览器请求某页时,客户端会将 Cookie 中的信息连同请求信息一起发送。服务器可以读取 Cookie 的值,Cookie的用途,用户的个人配置登录和“remember me”弹出窗口,编写Cookie,使用HttpResponse 对象 来设置Cookie,需要设置Cookie名称、值、过期时间等信息,/通过新建HttpCookie对象来添加CookieHttpCookie aCookie=new HttpCookie(lastVisit);/新建HttpCookie对象aCookie.Value=();aCookie.Expires=DateTime.Now.AddDays(1);/设

11、置Cookie的过期Response.Cookies.Add(aCookie);/将Cookie添加到Cookies集合/读取Cookie值string userName;if(Request.CookiesuserName!=null)userName=Request.CookiesuserName.Value;,编写多值Cookie,在一个 Cookie 中存储多个名称/值对,名称/值对称为子键,/直接添加CookieResponse.CookiesuserInfouserName=patrick;Response.CookiesuserInfolastVisit=();Response.

12、CookiesuserInfo.Expires=DateTime.Now.AddDays(1);/读取Cookie值string userName;if(Request.CookiesuserName!=null)if(Request.CookiesuserInfo userName!=null)userName=Request.CookiesuserInfouserName;,控制Cookie的范围,限制 Cookie 的域范围将 Cookie 限制到某个文件夹或应用程序,控制Cookie的范围,限制 Cookie 的域范围,Response.Cookiesdomain.Value=();R

13、esponse.Cookiesdomain.Expires=DateTime.Now.AddDays(1);Response.Cookiesdomain.Domain=support.;,控制Cookie的范围,将 Cookie 限制到某个文件夹或应用程序,HttpCookie appCookie=new HttpCookie(AppCookie);appCookie.Value=written+();appCookie.Expires=DateTime.Now.AddDays(1);appCookie.Path=/App1;Response.Cookies.Add(appCookie);,修

14、改和删除Cookie,由于Cookie存储在客户端,不能直接修改和删除 Cookie通过给Cookie赋新值替换旧版本Cookie的办法来修改可以通过设置Cookie立即过期的办法来删除Cookie,Cookie的应用,一般只要有会员、用户机制的网站或论坛在登录的时候都会有这么一个复选框记住我的名字|两周内不再登录|在此计算机上保存我的信息,说法较多,实现起来差不多,下面就来实现这样一个简单的例子。【例5-3】演示Cookie的使用。,参见示例第05章ClientStateDemoCookieDemo.aspx,服务器端状态维护技术,会话状态应用程序状态,会话状态,会话标识符配置会话状态 会话

15、状态事件会话状态变量的使用 会话状态的利弊,会话状态是ASP.NET中非常重要的服务器端状态管理技术,同时也是功能很强大的状态管理技术。会话状态是特定于用户的,当一个用户开始访问Web应用程序时,将会产生一个会话状态。不同的用户具有不同的会话状态,如果有一万个用户,将会有一万个会话状态。会话状态在存储与用户相关的信息方面非常有用,如博客登录后就可以使用会话状态存储通过验证的用户信息。,会话标识符,浏览器的会话使用存储在 SessionID 属性中的唯一标识符进行标识会话 ID 使 ASP.NET 应用程序能够将特定的浏览器与 Web 服务器上相关的会话数据和信息相关联会话 ID 的值在浏览器和

16、 Web 服务器间通过 Cookie 进行传输,如果指定了无 Cookie 会话,则通过 URL 进行传输,会话标识符,无Cookie的SessionID将Web.config 文件的 sessionState 节的 cookieless 属性设置为 true,可以指定不将会话标识符存储在 Cookie 中,而是存储在URL中,http:/localhost:10765/StateManageDemo/(S(hfuvhje2whhmnhyaocja54r0)/Default.aspx,会话标识符,配置会话状态,会话状态模式概述ASP.NET 会话状态支持若干用于会话数据的存储选项在 Web.c

17、onfig 文件中为 sessionState 元素的 mode 属性分配一个 SessionStateMode 枚举值,可以指定ASP.NET 会话状态使用的模式,配置会话状态(续),InProc模式(进程内模式)是默认会话状态模式,使用SessionStateMode枚举的InProc值指定进程内模式将会话状态值和变量存储在本地 Web 服务器的内存中是唯一支持 Session_End 事件的模式,配置会话状态(续),StateServer模式(状态服务器模式)会话状态存储在一个称为 ASP.NET 状态服务的进程中,该进程是独立于 ASP.NET 辅助进程或 IIS 应用程序池的单独进程

18、使用此模式可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器,配置会话状态(续),SQL Server模式会话状态存储到一个 SQL Server 数据库中可以确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于网络场中的多个 Web 服务器,配置会话状态(续),Custom摸式(自定义模式)指定使用自定义会话状态存储提供程序来存储会话状态数据在Web.config中配置sessionState 的提供程序为自定义的会话状态存储提供程序Off模式:此模式禁用会话状态。,会话状态事件,在Global.asax文件编写用于管理用户会话

19、的事件:Session_Start 事件:在新会话开始时触发Session_End 事件:在会话被放弃或过期时触发,Session_Start事件:通过向Global.asax文件添加一个名为Session_Start的事件过程来处理。如果请求开始一个新会话,Session_Start事件过程会在请求开始时运行。如果请求不包含SessionID值或请求所包含的SessionID属性引用一个已过期的会话,则会开始一个新会话。可以使用Session_Start事件初始化会话变量并跟踪与会话相关的信息。,Session_End事件:通过向Global.asax文件添加一个名为Session_End的

20、事件过程来处理。Session_End事件过程在调用Abandon方法或会话过期时运行。如果超过了某一会话Timeout属性指定的分钟数并且在此期间内没有请求该会话,则该会话过期。,会话状态变量的使用,向会话状态添加项以键/值对形式直接向Session中添加项以持久保留值,并且根据添加的键名称访问会话状态的值,/添加SessionUserName=mary;或:Session.Add(UserName,mary);/访问If(Session UserName!=null)string strUsername=Session UserName.ToString();,会话状态变量的使用,会话的过

21、期配置会话过期时间,默认过期时间为20分钟编写代码设置Session对象的Timeout属性,来设置会话状态过期时间,void Session_Start(object sender,EventArgs e)Session.Timeout=30;,使用会话状态,删除会话状态中的项调用Session对象的Clear和RemoveAll方法来删除会话状态集合中的所有项调用Remove和RemoveAt删除其中的某一项调用Abandon方法取消当前会话,即会话立即过期,Session.Remove(UserName);Session.Abandon();,【例5-4】演示会话状态变量的使用。,参见示

22、例第05章ServerStateDemoLogin.aspx 和Hello.aspx,会话状态的利弊,使用会话状态的优点:实现简单。会话特定的事件。数据持久性。平台可伸缩性。无需Cookie支持。可扩展性。使用会话状态的缺点:使用会话状态时,要注意其性能问题。,应用程序状态,应用程序状态概述添加和读取应用程序状态中的值演示和练习:使用应用程序状态来存储信息删除应用程序状态的值,应用程序状态概述,应用程序状态是一种全局存储机制,可以供Web应用程序中的所有页面(或Global.asax文件)访问存储在HttpApplicationState 类的实例中,该类在客户端第一次从某个特定的 ASP.N

23、ET 应用程序虚拟目录中请求任何 URL 资源时创建 目的在于存储需要在服务器往返行程之间及页请求之间维护的信息,添加和读取应用程序状态中的值,应用程序状态存储在一个键/值字典中,可以将特定于应用程序的信息添加到此结构以在页请求期间读取它一般在Global.asax文件中的应用程序启动事件中初始化应用程序状态值,而在所有的页面中都可以访问,Application.Lock();ApplicationWebVisitCount=(int)ApplicationWebVisitCount+1;Application.UnLock();,删除应用程序状态的值,调用HttpApplicationSta

24、te类的Clear或RemoveAll方法,删除应用程序状态集合中的所有变量调用Remove或RemoveAt方法来清除某一个变量,Application.Remove(“TotalCounter”);/通过传递变量名来删除Application.RemoveAt(0);/通过传递序号来删除,应用程序状态举例,【例5-4】下面利用应用程序状态变量实现网站在线人数和访问总人数的统计功能。,参见示例第05章ServerStateDemoGlobal.asax,应用程序状态的利弊,使用应用程序状态的优点如下:实现简单。应用程序状态易于使用,通过键/值对进行存储和访问。应用程序的范围。由于应用程序状态可供应用程序中的所有页来访问,因此在应用程序状态中存储信息可能意味着仅保留信息的一个副本。使用应用程序状态的缺点如下:资源要求。由于应用程序状态存储在内存中,因此比将数据保存到磁盘或数据库中速度更快。但是,在应用程序状态中存储较大的数据块可能会耗尽服务器内存,这会导致服务器将内存分页到磁盘。易失性。由于应用程序状态存储在服务器内存中,因此每当停止或重新启动应用程序时应用程序状态都将丢失。,5.4 小结,Web应用状态概述客户端状态维护技术服务器端状态维护技术,实验,参照实验手册,并在教师指导下完成实验报告。,习题,详见本书第七章后习题部分,请学生独立完成。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号