ASPNET的状态管理.ppt
《ASPNET的状态管理.ppt》由会员分享,可在线阅读,更多相关《ASPNET的状态管理.ppt(46页珍藏版)》请在三一办公上搜索。
1、第5章 ASP.NET的状态管理,本章内容:ASP.NET的状态管理包括使用Cookie、Session、Application对象实现状态管理,跨页存取数据,全局数据共享等。本章重点:使用Cookie对象实现状态管理,使用Session对象存、取数据,使用Application对象共享数据。,所谓“状态管理”,是指使用ASP.NET中的ViewState、Cookie、Session和Application等对象实现页面数据缓存和传递的技术。ASP.NET是一种无状态的网页连接机制,服务器处理客户端请求的网页后,与该客户端的连接就中断了。此外,到服务器端的每次往返都将销毁并重新创建网页,因此
2、,如果超出了单个网页的生存周期,网页中的信息将不复存在。也就是说,在默认情况下,服务器不会保存客户端再次请求页面和本次请求之间的关系和相关数据。在C/S架构的应用程序中,使用全局变量即可很好地解决这个问题,而在ASP.NET环境中则需要使用与状态管理相关的对象来保存用户数据。,5.1 状态管理概述,ViewState对象是ASP.NET状态管理中常用的一个对象,它通常被用来保存Web页信息及所含控件的值。5.2.1 ViewState对象概述使用ViewState对象可以十分方便地在这一过程中保留当前页面中所包含的数据。Web页面默认是具有“form runat=server”特性的,ASP.
3、NET会自动在输出时给页面添加一个隐含字段。打开一个aspx页面后,在浏览器中右击,在弹出的快捷菜单中单击“查看源”,即可看到经服务器转换成HTML格式后的页面源代码。如图5-1所示的是包含在源代码中的ViewState隐含字段及其值。,5.2 创建和使用ViewState对象,有了这个隐含字段,页面中其他所有的控件状态,包括页面本身的一些状态都会保存到这个隐含字段的值里面。并且,每次页面提交时会一起提交到服务器。当服务器将处理完毕的页面回发给客户端时,ASP.NET会根据这个值来恢复页面到各个控件提交前的状态。,5.2.2 使用ViewState1.使用ViewState对象时的注意事项使用
4、ViewState(视图状态)对象可以带来很多方便,但仍需要注意以下问题。ViewState对象仅能提供当前页面对象的状态信息,而且这些信息不能跨页使用。ViewState对象被序列化为XML的形式,然后再进行Base64编码。若页面中包含有一些用于分页显示数据的控件(如GridView),最好不要使用ViewState对象。ViewState对象的MaxPageStateFieldLength属性用来指定隐含字段的最大长度。,2.启用或禁用ViewState启用或禁止ViewState保存某控件的信息,可以通过设置控件的EnableViewState属性来实现。该属性值指示服务器控件是否向发
5、出请求的客户端,保持自己的视图状态以及它所包含的任何子控件的视图状态。如果允许控件维护自己的视图状态,则应设置为true(默认值);否则,应设置为false。仅当EnableViewState属性设置为true时,页面或控件的ViewStateMode属性才起作用。如果EnableViewState属性设置为false,则即使ViewStateMode属性设置为Enabled,视图状态也将关闭。,3.使用ViewState对象ViewState对象以“键/值对”的方式保存控件的名称和对应的值,以便在回发时还原控件的原始状态。对于控件的值保存和回发恢复,可由系统自动完成,一般不必为此编写专门的代
6、码。若用户希望将一些特殊的数据保存到ViewState对象中,则可以使用ViewState对象的Add()方法。其语法格式为:ViewState.Add(键名称,值)从ViewState中读取值的语法格式为:ViewState键名称,【演练5-1】本例将示范如何将一个字符串保存到ViewState中以及从ViewState中提取出来的编程方法。如图5-2所示,程序启动后,用户可在文本框中随意输入一些字符后单击“保存到ViewState”按钮,将其保存起来。需要读取时,可单击“从ViewState中读取”按钮,将ViewState中保存的指定数据显示到标签控件中,如图5-3所示。,新建一个ASP
7、.NET空网站,向其中添加一个Web窗体Default.aspx。向页面中添加一个文本框、一个标签和两个按钮控件。设置文本框的ID属性为txtString,设置标签控件的ID属性为lblShow,设置两个按钮的ID属性分别为btnSave和btnRead,设置两个按钮控件的Text属性分别为“保存到ViewState”和“从ViewState中读取”。【演练5-1】代码,Cookie是由服务器发送给客户机,并保存在客户机中的一些记录用户数据的文本文件。当用户访问网站时,Web服务器会发送一小段资料存放在客户机中,它会把用户在网站上所打开的网页内容、在页面中进行的选择或者操作步骤逐一记录下来。当
8、用户再次访问同一网站时(可能并不是相同的网页),Web服务器会首先查找客户机中是否存在有上次访问网站时留下的Cookie信息。若有,则会根据具体Cookie信息发送特定的网页给用户。在保存用户信息和维护浏览器状态方面,使用Cookie无疑是一种很好的方法。例如,可以将用户的登录信息(用户名、密码、是否登录成功的状态等)存放在Cookie中,方便应用程序对用户的合法性进行快速检查。,5.3 创建和使用Cookie对象,5.3.1 创建Cookie浏览器负责管理客户机中的Cookie,Cookie需要通过Response对象发送到浏览器中,发送前需要将其添加到Cookie集合中。Cookie有3个
9、重要的参数:名称、值和有效期。如果没有设置Cookie的有效期,它仍可被创建,但不会被Response对象发送到客户端,而是将其作为用户会话的一部分进行维护,当用户关闭浏览器(会话结束)时该Cookie将被释放。这种非永久性Cookie十分适合用来保存只需要短暂保存或由于安全原因不能保存在客户机中的信息。创建Cookie的语法格式如下:Response.Cookies名称.Value=值;,例如,创建一个名为“MyCookie”的Cookie并为其赋值“OK”,语句如下:Response.CookiesMyCookie.Value=OK;设置Cookie有效期的语法格式如下:Response.
10、Cookies名称.Expires=到期时间;例如,设置名为“MyCookie”的Cookie有效期为1天,语句如下:Response.CookiesMyCookie.Expires=DateTime.Now.AddDays(1);,5.3.2 读取Cookie使用Request对象的Cookies属性可以读取保存在客户机中指定Cookie的值,其语法格式如下:变量=Request.Cookies名称.Value;例如,将名为“MyCookie”的Cookie值读出,并赋给变量GetCookie,语句如下:string GetCookie=/声明一个字符串变量if(Request.Cookie
11、sMyCookie!=null)/判断目标Cookie是否存在 GetCookie=Request.CookiesMyCookie.Value;/读取指定Cookie的值,赋给变量,5.3.3 使用多值Cookie前面介绍过对同一网站,客户端存储的Cookie数量不能超过20个。若需要存储较多的数据,可考虑使用多值Cookie。例如,创建一个名为“Person”的Cookie集合,其中包含有3个子属性(对于浏览器来说,只相当于一条Cookie),语句如下:Response.CookiesPersonP_Name.Value=zhangsan;Response.CookiesPersonP_Em
12、ail.Value=;Response.CookiesPersonP_Home.Value=北京;,使用下列语句可从上述多值Cookie中读取数据:yr_name=Request.CookiesPersonP_Name.Value;yr_email=Request.CookiesPersonP_Email.Value;yr_home=Request.CookiesPersonP_Home.Value;或string yr_name=Request.CookiesPerson.Values0;string yr_name=Request.CookiesPerson.Values1;string
13、yr_name=Request.CookiesPerson.Values2;,【演练5-2】使用Cookie设计一个简单的网上投票管理程序,要求客户机在10分钟内不能再次投票。访问网站时首先显示如图5-4所示的页面,用户在选择了“最喜欢的书”后单击“提交”按钮,弹出如图5-5所示的信息框。如果用户在10分钟内再次执行投票操作,将弹出如图5-6所示的信息框,提醒用户在10分钟之内不允许再次投票。单击“查看结果”按钮,弹出如图5-7所示的信息框,显示各书的得票百分比。,如果用户在无任何人投票前单击了“查看结果”按钮,将弹出如图5-8所示的出错提示信息框。注意,若没有进行这种情况的判断,单击按钮时可
14、能会因分母为零而导致整个程序运行出错。设计指导思想。用户首次访问网站并投票成功后,系统创建一个有效期为10分钟的Cookie保存在用户计算机中。如果用户再次执行投票操作,系统会判断是否存在前面创建的有效Cookie。若有,则表明距上次投票操作没有超过10分钟,用户的投票操作无效,并给出提示信息;否则投票有效,进行票数累加。,设计Web页面。新建一个ASP.NET网站,向页面中添加一个单选按钮组控件RadioButtonList1和两个按钮控件Button1、Button2,并向页面中添加必要的文字信息。设置对象属性。设置RadioButtonList1的ID属性为SelectBook,并通过其
15、Items属性添加3本书的名称;设置Button1的ID属性为ButtonOK,Text属性为“提 交”;设置Button2的ID属性为btnResult,Text属性为“查看结果”。各控件的其他初始属性,在页面装入事件中通过代码进行设置。编写事件代码。【演练5-2】代码,与Cookie和ViewState不同,Session对象没有对存储数据量的限制,其中可以保存更复杂的数据类型,甚至可以在Session中保存一个DataSet(离线数据集)等。与Cookie对象一样,保存在Session中的数据可以跨网页使用,因此它常用来在不同网页中传递数据。此外,Session是一个存储在服务器端的对象
16、集合,避免了Cookie信息保存在客户端的不安全因素,非常适合用户保存用户名、密码等敏感信息。在ASP.NET中使用Session对象时,必须保证页面的Page指令中EnableSessionState属性的值被设置为true(默认)或ReadOnly,并且在web.config文件中对Session进行了正确的设置(默认设置为开启Session)。,5.4 创建和使用Session对象,5.4.1 Session的工作原理当用户请求一个ASP.NET页面时,系统将自动创建一个Session(会话);当退出应用程序或关闭服务器时,该会话撤销。系统在创建会话时将为其分配一个长长的字符串(Sess
17、ionID)标识,以实现对会话进行管理和跟踪。该字符串中只包含URL中所允许的ASCII字符。SessionID具有的随机性和唯一性保证了会话不会冲突,也不会被怀有恶意的人利用新SessionID推算出现有会话的SessionID。通常,SessionID会存放在客户端的Cookie内,当用户访问ASP.NET网站中任何一个页面时,SessionID将通过Cookie传递到服务器端,服务器根据SessionID的值对用户进行识别,以返回对应于该用户的Session信息。通过配置应用程序,可以在客户端不支持Cookie时将SessionID嵌套在URL中,服务器可以通过请求的URL获得Sessi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ASPNET 状态 管理
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6501785.html