第6章 Web应用程序状态保存_第1页
第6章 Web应用程序状态保存_第2页
第6章 Web应用程序状态保存_第3页
第6章 Web应用程序状态保存_第4页
第6章 Web应用程序状态保存_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Web应用程序状态保存,北京理工大学计算机学院金旭亮,ASP.NET程序设计之,主要内容,HTTP协议的无状态特性主要的状态保持技术ViewStateSessionApplicationCookieQueryingStringHiddenFieldWeb.Config跨页回发,2,HTTP协议无状态特性,引发“Web状态保持”问题的现实背景,引例:按钮计数器,Demo:ClickCounter1.aspx(ClickCounter网站),不管单击多少次按钮,始终只显示1次,4,HTTP无状态特性,在向Web服务器提交的多次HTTP请求之间,Web服务器不会保留前一次访问的状态信息,不管同一个客户端连续多少次访问,Web服务器都将其看成是一个“陌生人”的“拜访”。所谓“状态”,其实就是与每次HTTP请求相关联的一些信息,比如用户在某个页面上输入的一些数据。在实际开发中,必须要在多次HTTP请求之间保存状态。因此,任何一个Web开发技术都必须面对这样一个问题并给出一个解决方案。,5,ASP.NET如何保存Web应用的状态?,1ViewState,在针对同一页面的多次请求间保存状态,按钮计数器(版本2),Demo:ClickCounter2.aspx(UseViewState网站)要点:1如何区分是第一次访问还是第二次回发?Page类的IsPostBack属性2保存在ViewState对象中的数据都拥有一个唯一标识(Key),对象本身则被称为值(Value),8,哪些对象可以保存在ViewState中?,只有可以被“序列化”的对象才可以保存在ViewState中。所谓“序列化(Serializable)”,指的是将一个对象的属性值保存到一个流(Stream)对象中,在需要时可以从流对象中重新创建对象。要创建一个可序列化的类,只需要在类前面添加Serializable标记。Demo:ClickCounter3.aspx,9,ViewState揭秘第一次请求,创建页面类对象,调用其ProcessRequest()方法,提取出页面上的控件状态信息对象,将控件状态信息对象序列化,存入到一个隐藏域_VIEWSTATE中,生成HTML代码,HTTP请求,其中,其他处理工作,Client端,Server端,10,ViewState揭秘回发阶段,创建页面类对象,调用其ProcessRequest()方法,处理回发的数据,更新控件状态,进行一系列的后继处理工作,将当前控件状态信息对象序列化,存入到一个隐藏域_VIEWSTATE中,HTTP请求,其中,Client端,Server端,从发回的隐藏域_VIEWSTATE中提取信息,反序列化,得到状态对象,复原控件状态,生成HTML代码,其他处理工作,11,ViewState的不足,ViewState只能在同一个页面的多次回发间保存状态信息。它不能解决在多个页面间共享状态信息的问题,而这个问题在电子商务网站中是必须解决的。,12,2Session,在同一网站的多个页面间共享信息,Session,同一个浏览器窗口访问同一个网站的多个页面,称为“Session(会话状态)”。可以使用Session在多个页面间保存信息。使用Page或HttpContext对象的Session属性访问SessionSession的使用与ViewState类似,使用“SessionKey”的方式存取放在Session对象中的数据,14,Session示例:在线购物车,Demo:ShoppingCart,15,购物车示例程序的分析,商品有自己的标识:书book:复选框控件的ID电脑computer:复选框控件的ID通过检查页面上复选框选中与否了解用户选中了哪些商品。并将这些选中的商品保存到Session中。这些信息按照“商品标识(Key)和商品名称(Value)”的格式保存。通过遍历保存在Session的购物记录了解用户选购了哪些商品,使用BulletedList控件显示它们。,16,购物车示例程序的要点,注意控件是如何动态创建的注意页面状态是如何保存的。一个关键点:页面控件的事件响应函数的调用是在Page_Load()函数调用过之后请同学们在课后不看源码,自己动手将此示例程序做一遍,一定会对ASP.NET应用程序的开发有新的体会。,17,Session的进一步介绍,Session是有时间限制的,它的Timeout属性指明了Session有效的时间。当一个新的Session开始时,会激发一个Session_Start事件。当Session超时,或者程序中调用了Session.Abandon(),还包括ASP.NET网站被关闭这三种情况,session_End事件激发。在Global.asax中响应这些事件。Session是网站相关的,若中途切换到另一个网站,则此网站不能使用原有的Session。,18,3Cookie,保存针对特定网站的信息,什么是Cookie?,Cookie是一些少量的数据,这些数据或者存储在客户端文件系统的文本文件中,或者存储在客户端浏览器会话的内存中。Cookie包含特定站点的信息,这些信息最初是与浏览器请求的页面一块由Web服务器发送到客户端的。当浏览器再次访问特定的站点时,会将此站点相关的Cookie连同请求信息一起发送,Web服务器可以读取Cookie并提取它的值。CookieVSSession,Cookie与站点相关,浏览器关闭后仍有效。,20,针对Cookie编程,在服务器端编码保存Cookie到客户端:,stringuserName=;if(Request.CookiesuserName!=null)userName=Request.CookiesuserName;,Response.Cookies“UserName”=“张三”;,在服务器端访问客户端发回的Cookie:,21,Cookie应用实例,Demo:UseCookie(使用Cookie保存用户登录信息),22,示例程序分析,当用户不登录就尝试访问Default.aspx,会显示登录页要求其登录若用户输入用户名和密码,使用Session来保存用户登录信息。关闭浏览器后登录信息无效。若用户登录时选择“一周内不用登录”时,将用户信息记到Cookie中,下次访问Default.aspx时会认为其已登录,不再要求其输入用户名和密码。要删除Cookie,可以将其过期时间设置为过去的某个时间。,23,4Application,在整个网站内共享信息,什么是Application?,Application是一种全局性的信息存储机制,可被同一个Web应用程序中的所有页面使用页面中使用“ApplicationKey”的方式来存取在Application对象中的信息,25,Demo:全局计数器,Demo:UseApplication,26,UseApplication示例分析,可以在多个浏览器窗口中访问同一个ASP.NET网站中的页面,这些页面可以共享Application中的信息。为保证数据的同步,修改Application中的数据时要加锁。Application中的数据保存在服务器的内存中,除非Web服务器重启,否则,这些数据都是有效的。,27,Application特别注意:,本讲中介绍的Application对象是HttpApplicationState的实例,它与第4讲要介绍的HttpApplication是两回事,一定要注意区分清楚。,28,5查询字符串,在不同网站间共享信息的简单方法,什么是“查询字符串”?,查询字符串是在页URL结尾附加的信息,30,使用查询字串在页面间传送信息,Demo:UseQueryString,31,关于URL中的字符编码问题,为了能在URL中正确传送中文,必须将中文数据进行编码后再予以传输,可调用以下方法:HttpServerUtility.UrlEncode()/UrlDecode()在页面中,可以通过Server属性来访问此方法。,32,6隐藏域,沟通JavaScript(前端)和C#(后端)代码的桥梁,隐藏域,HiddenField控件会自动生成type=“hidden”的input元素,并可设置其值。HiddenField控件的值可以在服务器端用C#访问,也可以客户端用JavaScript访问,因此,这是沟通JavaScript和C#代码的一种简单而有效的手段。,34,隐藏域示例:获取网页传输时间,Demo:UseHiddenField,35,隐藏域的特点:,隐藏域的值以明文方式直接暴露在客户端,因此,不要保存重要的信息。隐藏域可以存储的数据大小有限。,36,7跨页回发,直接在两个相邻页中传送信息,跨页回发,如果两个页面需要相互交换信息,并且有非常明确的顺序关系,则可以使用跨页回发技术。Demo:CrossPagePost,38,实现跨页回发要点:,源页引发回发的控件设定PostBackUrl属性,目标页使用PreviousPage.FindControl(“控

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论