状态管理(Session).ppt_第1页
状态管理(Session).ppt_第2页
状态管理(Session).ppt_第3页
状态管理(Session).ppt_第4页
状态管理(Session).ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

状 态 管 理,网站与桌面系统的工作方式不同,与传统的分布式系统也不相同。在桌面系统中,系统资源被独占;在传统的分布式系统中,资源虽然分布在系统的各个环节,但是只要不专门指定,系统总是保持连接的。网站系统虽然也是一个分布式系统,但由于服务器要为众多的用户服务,浏览器与服务器之间的连接是不连续的,状态也是不保持的,HTTP是一个无状态的通信协议。这就是说,在网站系统中,每次浏览器与服务器之间的连接都是暂时的。当浏览器与服务器之间的一次会话结束,它们之间的连接也就自动断开了,下一次会话与本次连接无关,两次连接之间不存在任何联系。,状 态 管 理,为什么不保持状态呢?这是因为访问网站的用户常常川流不息。如果要求系统将所有被访问的网页的状态都记忆下来,必然会耗费大量的系统资源,严重地降低程序的运行效率。 然而,在网站应用中有的状态却是需要保留的,比如用户在购货车中订购商品、用户登录的身份、对问卷调查所作的回答等,这些状态中有的希望能够保留一定的时间,以便联合处理或者在一定的范围内进行传递和共享。,状 态 管 理,为此,系统提供了状态管理方法,允许有选择地将一些状态(数据)在一定的时间内持续地保存下来。本讲将要介绍几种状态的管理方法,具体内容包括: 状态管理 视图状态 会话状态 Web窗体页的生命周期,状 态 管 理,1 状态管理 2 视 图 状 态 3 会 话 状 态 4 简单的应用示例,1 状态管理,状态管理 状态管理的类型 服务器端状态管理 客户端状态管理 Global.asax 文件,状态管理,姓,名,请输入您的 登录信息:,John,提交,Chen,Web 服务器,Login.aspx,Login.aspx,Web 服务器,Hello John Chen,Greetings.aspx,请输入您的 登录信息:,John,提交,Chen,Hello,Greetings.aspx,我忘记您了!,姓,名,无状态管理,有状态管理,状态管理,有状态与无状态: 有状态是指在整个系统的处理过程中要保留记住一些信息,而无状态则相反,它指协议对于事务处理没有记忆能力,每次请求都是独立的连接,不需要在每个请求之间共享数据等等。 HTTP协议是无状态协议。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。 为什么需要使用状态管理? 需要使用状态管理的场合,客户端状态是将信息保留在客户端计算机上,当客户端向服务器端发送请求时,状态信息会随之发送到服务器端。 服务器状态是指状态的信息保存于服务器。,状态管理,状态管理的类型,服务器端状态管理,服务器端状态管理 与客户端状态管理相比,具有更高的安全性 与客户端状态管理需相比,需要使用更多的 Web 服务器资源 可通过应用程序状态(Application)、会话状态(Session)和数据库保存会话状态来实现,服务器端状态管理,应用程序状态管理 使用应用程序状态(HttpApplicationState 类的一个实例)来保存每个活动 Web 应用程序的值 该信息对整个应用程序的所有页面都是可见的 使用键/值词典结构存储应用程序变量 常用于存储多个会话共享的、不经常改变的信息 优点:易于实现、全局范围 缺点:全局范围、持久性、资源要求,服务器端状态管理,会话状态 使用会话状态(HttpSessionState 类的一个实例)保存每个活动 Web 应用程序会话的值 会话状态的范围限于当前的浏览器会话 使用键/值词典结构存储会话变量 可扩展性较好:可以将会话信息存储在 Cookie 中、进程外服务器中或 SQL Server 中 使用 SessionID 标识不同的会话 不同的用户有不同的会话状态,同一用户在退出后返回,也将有不同的会话状态 优点:易于实现、具有会话特定的事件、持久性、平台可缩放性和可用于不支持 HTTP Cookie 的浏览器 缺点:可能降低服务器性能,客户端状态管理,客户端状态管理 不如服务器端状态管理选项安全 不如服务器端管理选项可靠 可存储的信息量可能受到限制 使用 Cookie 维护状态 持久性 Cookie 临时性的或非持久性的 Cookie,用户可以删 除 Cookie,恶意的用户可通过某 些方法来“盗取” Cookie 并读取其中的内容,Global.asax 文件,一个 Web 应用程序只有一个 Global.asax 文件 文件驻留在 ASP.NET 的应用程序的虚拟根目录中 用来处理应用程序级事件和会话事件 Global.asax 文件可选 不能直接通过 URL 请求 Global.asax 文件,1 状态管理,本讲介绍以下ASP.NET提供的3种状态类型,分别应用于不同的目的。 视图状态:用于保存本窗体页的状态。 应用程序状态:用于保存整个应用程序的状态,状态存储在服务器端。 会话状态:用于保存单一用户的状态,状态存储在服务器端。 Cookie状态:用于保存单一用户的状态,状态存储在浏览器端。,2 视 图 状 态,什么是视图状态?简单地说,视图状态就是本窗体的状态。保持视图状态就是在反复访问本窗体页的情况下,能够保持状态的连续性。 为什么要保持视图状态?ASP.NET中的事件处理模型是基于服务器处理事件的,当服务器处理完事件后通常再次返回到本窗体以便继续后续的操作。如果不保持视图状态,就是说当窗体页返回时,窗体页中原有的状态(数据)都不再存在,这种情况下怎样能够继续窗体的操作?,2 视 图 状 态,下面用一个简单的示例来说明这种情况。 假定向窗体中放入几个HTML控件(浏览器端控件)。 一个Input(Text)控件:用来输入姓名。 一个Input(Password)控件:用来输入密码。 一个Input(Text)控件:用来输入数量。 一个Input(Submit)按钮控件:用来向服务器提交数据。 参见图1 使用HTML控件的示例,2 视 图 状 态,2 视 图 状 态,这说明在网页中已经自动增加了一个隐含控件,控件的名字为“_VIEWSTATE”。由于这个新控件是隐含控件(type=“hidden”),因此增加它并不会改变界面上的布局。控件中的value属性就是窗体页中各个控件以及控件中的数据(状态)。为了安全,这些数据经过哈希函数加密,已经变得难以辨认。 在处理页面时,页面和控件的当前状态会散列为一个字符串,并在页面中保存为一个隐藏域或多个隐藏域。当将页面回发到服务器时,页面会在页面初始化阶段分析视图状态字符串,并还原页面中的属性信息。,2 视 图 状 态,当提交网页时,浏览器端首先将当前网页中的各种状态保留到这个字段中,当网页再次返回到本窗体页时,再自动将把这些状态反馈给返回的窗体页,也就恢复了窗体页中各控件的状态。 ViewState 属性提供一个键/值字典对象,用于保留同一页的多个请求之间的数据。这是页面在客户端与服务器端往返之间保存页面和控件状态的默认方法。,2 视 图 状 态,示例:用ViewState属性累计在本表单上按钮的单击次数。 源程序:CountViewState.aspx 示例:利用ViewState变量保存和读取页面信息。 源程序:ViewStateSaveRead.aspx,2 视 图 状 态,视图状态只能在本网页与服务器的往返中保持,而不能在不同网页之间传递,这是和其他状态所不同的地方。在默认情况下几乎所有服务器控件都具有保持视图状态的功能。 保持视图状态带来了好处,但同时也带来一些新的矛盾。如果控件中包括的数据量很大(例如某控件内有数百条记录)时,将会延长网页往返时需要的时间。另外,尽管视图状态存储在窗体页的隐藏域中,并且经过哈希函数的加密处理,但它仍然有可能被篡改,这就导致了潜在的安全问题。,禁用ViewState:属性EnableViewState设置为false 。 禁止整个网页的ViewState:使用Page指令。 ,2 视 图 状 态,3 会 话 状 态,3.1 概述 3.2 会话状态的保存、启动、管理 3.3 Session对象事件 3.3 会话变量存储,3.1 概述,什么是会话状态?会话状态(Session State)是为单个用户保留的状态。 Session对象用于保存用户会话所需要的信息,从一个用户访问某个特定的主页开始,直到用户离开。 Session对象是Web应用程序为当前访问该站点的每个用户会话提供信息。用户请求来自网站的Web页就是一次会话。当某一用户第一次请求某个网站的.aspx文件时,ASP.NET将在服务器端生成一个SessionID,以标识该用户。,3.1 概述,用户在应用程序的页面之间切换时,保存在Session对象中的变量不会被清除,而用户在应用程序中访问页面时,这些变量始终存在。 在网站中,每一个新访问的用户都将产生自己的会话(Session)对象。这个Session对象在服务器端进行管理,只能为当前访问的用户服务。如果另一位用户也进入网站,他也将拥有自己的Session对象,两个用户的Session对象之间即使同名,也不能共享同一个Session对象。,3.1 概述,ASP.NET用一个唯一的120位Session ID来标识每一个会话。 若客户端支持Cookie,ASP.NET会将Session ID保存到相应的Cookie中;若不支持,就将Session ID添加到URL中。 Session由System.Web.HttpSessionState类实现,使用时,常直接通过Page类的Session属性访问HttpSessionState类的实例。 在Session对象中存储任何数据类型,包括用户定义的类和结构。,HttpSessionState常用的属性、方法和事件表,3.2 会话状态的保存、启动、管理,Session对象的方法可以用来保存会话状态和管理会话状态两个方面。 1. 保存会话状态 保存Session对象时可以使用以下语句: Session“Message“ = “MyMsg“; 取出Session对象时可以使用以下语句: string MyVar= Session“Message“.ToString(); 为了与 ASP 的早期版本兼容,也可以使用 Contents 属性访问这些值,语句如下: Session.Contents“Message“ = “MyMsg“; string MyVar= Session.Contents“Message“.ToString();,实例 Session应用,本实例能保护某些网页,如要进入Session.aspx页面,则首先要通过登录认证。 源程序:Session.aspx 程序说明: 当用户直接访问Session.aspx时,会判断Session“Name“状态值,若为空则重定向到SessionLogin.aspx,否则显示欢迎信息。 在SessionLogin.aspx中用户登录成功后,将建立Session“Name“状态值。此时要测试是否存在Session“Name“状态值,应在打开SessionLogin.aspx页面的浏览器中直接更改地址来访问Session.aspx。,3.2 会话状态的保存、启动、管理,2. 启动会话状态 应用程序状态在网站中总是可用的,而会话状态在使用前必须先启动。不过,因为配置文件(Machine.config)的默认设置是启动会话状态,因此不需要额外的步骤就能启动它。虽然如此,还是应该知道,是Machine.config和应用程序的Web.config配置文件的设置决定了会话状态是被启动还是被禁止。 如果想延迟到需要时再启动会话状态,则可以在页面中编写以下指令: 上述设定并不会毁坏其他页面建立的会话,而只会禁止从该页面访问Session对象的值。,3.2 会话状态的保存、启动、管理,图2 设置enableSessionState属性,另外一种方法就是通过改变窗体页的属性来选择,在下拉列表框中选择DOCUMENT,然后选择enableSessionState属性,可以在enableSessionState属性的下拉列表中的True、False、ReadOnly的选项中选择一种。,3.2 会话状态的保存、启动、管理,3管理会话 Session对象提供了Timeout属性,用来设置Session的有效时限,以分钟为单位。默认情况下有效时限为20分钟。即如果在有效时间内没有链接Web服务器,对Session的设置将自动失效。可以在网页中延长或缩短Session的有效时间,例如语句: Session.Timeout=40 ; 就可以将Session的有效时间延长至40分钟。,在 Web.config 文件中更改会话生存期,3.2 会话状态的保存、启动、管理,如果需要终止Session的使用时,可以调用Abandon()方法。语句如下: Session.Abandon();,3.3 Session事件,Session对象拥有Start和End事件,他们都存在于文件Global.asax中。当一个Session对象被创建时,触发Session_Start事件;当一个Session对象被终止时,触发Session_End事件。利用这两个事件可以处理一些有用的事情,如用户信息初始化等等。 Session_Start,Session_End事件产生在Application_Start之后,Application_End事件之前。,3.3 Session事件,只有在 web.config 文件中的 sessionstate 模式设置为InProc时,才会引发Session_End事件。如果会话模式设置为StateServer或SQLServer,则不会引发该事件。 Session_End事件是在会话结束时触发,所以关闭浏览器不会立即触发该事件,只有到达属性Timeout设置的时间时该事件才被触发,演示 使用Session变量,在 global.asax 中初始化一个会话变量 从页面中访问该会话变量 在另一页面中访问并修改该会话变量 在第一个页面重新访问该会话变量 源程序:UsingSessionVar1.aspx UsingSessionVar2.aspx,3.3 Session事件,实例 统计网站在线人数,页面呈现网站在线人数。需考虑3个方面:初始化计数器;当一个用户访问网站时,计数器增1;当一个用户离开网站时,计数器减1。 初始化计数器要利用Application_Start事件,并在事件代码中定义Application状态。用户访问网站时增加计数要利用Session_Start事件,并在事件代码中增加Application状态值。用户离开网站时减少计数要利用Session_End事件,并在事件代码中减小Application状态值。 源程序:Global.asax、Application.aspx,3.3 会话变量存储,可以在web.config中通过元素的mode属性来指定,共有Off、InProc、StateServer、SQLServer和Custom五个枚举值供选择,分别代表禁用、进程内、独立的状态服务、SQLServer和自定义数据存储。 在实际工程项目中,一般选择StateServer,而对于大型网站常选用SQLServer。,3.3 会话变量存储,进程内会话状态模式 会话状态信息存储在运行 ASP.NET 进程的 Web 服务器中 进程外会话状态模式 会话状态信息存储在 SQL Server 数据库中 独立的状态服务器维护会话状态,SQL,-或-,Web Farm,会话和应用程序变量,状态服务器,客户端,会话和应用程序变量,进程内会话状态模式的优点 迄今为止速度最快的解决方案 服务器配置和管理简单 进程内会话状态模式的缺点 重新启动 IIS 或应用程序域将丢失会

温馨提示

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

最新文档

评论

0/150

提交评论