《ASPnet4高级程序设计【状态管理】.ppt》由会员分享,可在线阅读,更多相关《ASPnet4高级程序设计【状态管理】.ppt(44页珍藏版)》请在三一办公上搜索。
1、ASP.NET4 高级程序设计,状态管理,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,Web应用无状态特点,客户端,服务器端,请求,生成对象数据,处理对象数据,处理结果,返回,销毁对象,再次请求,Web应用无状态特点,基于HTTP协议的每次访问完后,都将与服务器端断开连接能够同时处理多个请求(有状态的情况下,服务器内存可能会崩溃)但给数据处理带来了不便(新的请求可能会使用上一次请求的处理的结果),A状态管理,提供了多种机制根据存储的数据、安全性等因素考虑选择什么机制可多种机制共存,本节内容,视图机制隐藏域Cookie机制Se
2、ssion机制Querystring机制应用程序状态配置文件跨页传递,视图机制,单个页面保存数据第一选择在针对页面的连续请求过程中,视图数据会在客户端与服务器端不断的传递体现形式服务器端:键值对的形式客户端:加密后的字符串,保存在隐藏域中操作方式服务器端:ViewState“Key”客户端:无法修改,视图机制示例,页面请求数Viewstate“count”,视图与对象序列化,类对象序列化类必须有serializable特性serializable所有的基类必须具有serializable特性所有的属性必须是可序列化的数据类型,若不想序列化某个属性,需要标识nonserializableView
3、State“key”=对象;,对象视图的示例,serializableClass CustomPublic string FirstName;Publis string LastName;Custom c=new Custom();Viewstate“custom”=c;,视图机制优缺点,优点在页面访问过程中可以保持数据状态缺点增加了访问负载什么情况下,考虑不使用视图核心数据被多个页面使用的数据存储的信息量大,服务器控件与视图,服务器控件很多属性都是基于视图的页面访问过程中,会加载视图,A禁用视图,Enableviewstate禁用页面视图禁用控件视图ViewStateMode,视图安全,默认
4、情况下,视图状态数据存储在页上的隐藏字段中,并使用 Base64 编码机制进行编码可能被恶意用户截获和读取为了保证安全,可以对视图数据进行加密ViewStateEncryptionMode=true对视图状态数据进行加密可能会影响应用程序的性能。因此,如不需要,请不要使用加密.,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,隐藏域,ASP.NET 允许您将信息存储在 HiddenField 控件中,隐藏域在浏览器中不以可见的形式呈现当向服务器提交页时,隐藏域的内容将在 HTTP 窗体集合中随同其他控件的值一起发送恶意用户可以很
5、容易地查看和修改隐藏域的内容。请不要在隐藏域中存储任何敏感信息或保障应用程序正确运行的信息,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,Cookie机制简介,Cookie 保存在客户端设备上(客户端浏览器会话的内存或磁盘),当浏览器请求某页时,客户端会将 Cookie 中的信息连同请求信息一起发送服务器可以读取 Cookie 并提取它的值Cookie 与网站关联,而不是与特定的页面关联常用于保存当前用户信息,以指示该用户已经在您的应用程序中进行了身份验证,Cookie使用示例,输出Cookie到客户端在服务器端访问Cooki
6、e,多值 Cookie,Response.CookiesuserInfouserName=patrick;Response.CookiesuserInfolastVisit=DateTime.Now.ToString();Response.CookiesuserInfo.Expires=DateTime.Now.AddDays(1);HttpCookie aCookie=new HttpCookie(userInfo);aCookie.ValuesuserName=patrick;aCookie.ValueslastVisit=DateTime.Now.ToString();aCookie.E
7、xpires=DateTime.Now.AddDays(1);Response.Cookies.Add(aCookie);,控制 Cookie 的范围,默认情况下,一个站点的全部 Cookie 都一起存储在客户端上,而且所有 Cookie 都会随着对该站点发送的任何请求一起发送到服务器可以通过两种方式设置 Cookie 的范围:将 Cookie 的范围限制到服务器上的某个文件夹,这允许您将 Cookie 限制到站点上的某个应用程序。将范围设置为某个域,这允许您指定域中的哪些子域可以访问 Cookie。,控制 Cookie 的范围,将 Cookie 限制到某个文件夹或应用程序设置cookie的P
8、ath属性限制 Cookie 的域范围设置cookie的domain属性可通过此设置创建可在多个子域间共享的 Cookie,修改或删除cookie,Cookie的修改删除操作,都是创建新的cookie覆盖旧cookie删除cookie:创建一个与要删除的 Cookie 同名的新 Cookie,并将该 Cookie 的到期日期设置为早于当前日期的某个日期修改或删除子键修改删除,Cookie注意事项,安全性恶意用户可通过多种方法访问 Cookie 并读取其中的内容。建议不要将敏感信息(如用户名或密码)存储在 Cookie 中。Cookie 以明文形式在浏览器和服务器间发送,任何可以截获 Web 通
9、信的人都可以读取 Cookie。可以设置 Cookie 属性,使 Cookie 只能在使用安全套接字层(SSL)的连接上传输。大小限制大多数浏览器对 Cookie 的大小有 4096 字节的限制,尽管在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见禁用有些用户禁用了浏览器或客户端设备接收 Cookie 的能力,因此限制了这一功能,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,Session介绍,ASP.NET 应用程序启用会话状态时,将检查应用程序中每个页面请求是否有浏览器发送的 Ses
10、sionID 值。如果未提供任何 SessionID 值,则 ASP.NET 启动一个新会话,然后将该会话的 SessionID 随响应一起发送到浏览器会话由一个可以使用 SessionID 属性读取的唯一会话标识符标识默认情况下,SessionID 值存储在 cookie 中,但也可以配置应用程序,将 SessionID 值存储在 URL 中Session状态使用的范围:使用同一个客户端(浏览器实例)访问同一个应用程序的所有页面,Session使用,Session“key”=value;会话变量集合按变量名称或整数索引来进行索引仅需通过名称引用会话变量即可创建会话变量,无需声明会话变量或将会
11、话变量显式添加到集合中默认情况下,会话变量可以为任何有效的.NET 类型,Session示例,用户登录信息,Session生命周期,默认情况下,Session 的超时时间(Timeout)是20分钟,用户保持连续20分钟不访问网站,则Session被收回可在程序中进行设置:Session.Timeout=30;在配置文件中设置超时时间:sessionState配置节,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,查询字符串,通过URL地址传递数据的方式格式:?key1=value1&key2=value2访问:Request.
12、QueryString“key名称”,查询字符串使用注意,在查询字符串中传递的信息可能会被恶意用户篡改。不要依靠查询字符串来传递重要的或敏感的数据大多数浏览器和客户端设备会将 URL 的最大长度限制为 2083 个字符,所以不能通过查询字符串传递大数据信息,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,应用程序状态,应用程序状态是可供 ASP.NET 应用程序中的所有类使用的数据储存库它存储在服务器的内存中与特定于单个用户会话的会话状态不同,应用程序状态应用于所有的用户和会话应用程序状态用于存储那些数量较少、不随用户的变化而变
13、化的常用数据,应用状态使用,应用程序状态存储在 HttpApplicationState 类的实例中。此类公开对象的键值字典HttpApplicationState类通常通过 HttpContext 类的 Application属性访问在web窗体中,直接通过Page.Application访问,Application使用示例,网站访问计数器,Application与session比较,相同点都是存储在服务器端不同点Application是全局的存储机制,可以在所有页面中访问Session是局部的(即针对每个会话),只能在自己的会话中访问,应用状态使用注意,由于应用程序状态存储在内存中,因此比
14、将数据保存到磁盘或数据库中速度更快。但是,在应用程序状态中存储较大的数据块可能会耗尽服务器内存由于应用程序状态存储在服务器内存中,因此每当停止或重新启动应用程序时应用程序状态都将丢失应用程序状态不能在为同一应用程序服务的多个服务器间应用程序状态采用自由线程模式,即应用程序状态数据可由多个线程同时访问。因此,必须确保通过包含内置同步支持,以线程安全的方式进行应用程序状态数据更新,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,配置文件,配置文件是可以按需要更改的 XML 文件可以使用配置文件来保存应用程序运行环境信息更改设置,而不
15、必重编译应用程序,本节内容,视图机制隐藏域Cookie机制Session机制Querystring机制应用程序状态配置文件跨页传递,IsPostBack,指示该页是否正为响应客户端回发而加载,或者它是否正被首次加载和访问如果是为响应客户端回发而加载该页,则为 true;否则为 false。通过判断IsPostBack来进行复杂的页面数据初始化工作验证示例,跨页传递,PostBackUrl:回发地址PreviousPage:获取向当前页传输控件的页IsCrossPagePostBack:指示跨页回发中是否涉及该页,如何访问原页面中的控件,通过PreviousPage.FindControl查找控件如果控件是在其他容器类控件中,则需要先找到容器类控件对象,然后调用容器类控件对象的FindControl方法查找指定控件,