版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第5章章web应用的状态管理应用的状态管理内容vweb应用状态概述应用状态概述v客户端状态维护技术客户端状态维护技术v服务器端状态维护技术服务器端状态维护技术http协议“无状态的协议”vweb服务器每分钟对上千个用户进行管理的一种服务器每分钟对上千个用户进行管理的一种方式就是执行所谓的方式就是执行所谓的“无状态无状态”连接。只要有一连接。只要有一个希望浏览器返回一个页面、图像或其他资源的个希望浏览器返回一个页面、图像或其他资源的请求,就发生以下事情:请求,就发生以下事情:连接到服务器连接到服务器告诉服务器想要的页面、图像或其他项告诉服务器想要的页面、图像或其他项服务器发送请求资源服务器发送
2、请求资源服务器切断连接,把用户忘得干干净净。服务器切断连接,把用户忘得干干净净。asp.net web form的“连续”和“有状态”的假象vasp.net的设计者们,从实际访问者的角度的设计者们,从实际访问者的角度重新考虑了这一过程:访问者打开一个页面,重新考虑了这一过程:访问者打开一个页面,点击一个按钮,看到新的画面点击一个按钮,看到新的画面这一切似乎这一切似乎都是连续的。都是连续的。状态管理vweb应用本质上是无状态的,如需保存状态应用本质上是无状态的,如需保存状态则需要做状态管理,状态维护是对同一页或则需要做状态管理,状态维护是对同一页或不同页的多个请求维护状态和页信息的过不同页的多个
3、请求维护状态和页信息的过程程 ,保持用户信息(状态)的连续性。,保持用户信息(状态)的连续性。状态管理状态维护技术状态维护技术v视图状态:视图状态:使用一个或多个隐藏域来保存控件的状态。使用一个或多个隐藏域来保存控件的状态。v控件状态:控件状态:当开发自定义控件时,保存控件的状态数据。当开发自定义控件时,保存控件的状态数据。v隐藏域:隐藏域:标准的标准的html隐藏域。隐藏域。vcookie:用于在客户端保存少量的数据。用于在客户端保存少量的数据。v查询字符串:查询字符串:查询字符串是在页查询字符串是在页url的结尾附加的信息。的结尾附加的信息。v应用程序状态:应用程序状态:用于保存服务器端的
4、全局应用程序信息。用于保存服务器端的全局应用程序信息。v会话状态:会话状态:保存会话状态信息。保存会话状态信息。v配置文件属性:配置文件属性:asp.net提供了一个称为配置文件属提供了一个称为配置文件属性的功能,可以保存服务器端的全局应用程序信息。性的功能,可以保存服务器端的全局应用程序信息。客户端状态管理v客户端状态管理客户端状态管理不如服务器端状态管理选项安全不如服务器端状态管理选项安全不如服务器端管理选项可靠不如服务器端管理选项可靠可存储的信息量可能受到限制可存储的信息量可能受到限制用户可以删用户可以删除除 cookie恶意的用户可通过某恶意的用户可通过某些方法来篡改些方法来篡改 或读
5、取或读取其中的内容其中的内容web 服务器服务器客户端计算机客户端计算机客户端客户端状态信状态信息息服务器端状态管理可通过应用程序状态(可通过应用程序状态(application)、会话)、会话状态(状态(session)、配置文件、数据库保存会)、配置文件、数据库保存会话状态来实现话状态来实现web 服务器服务器客户端计算机客户端计算机服务器端状态信息服务器端状态信息sessionid客户端状态维护技术v视图状态视图状态v隐藏域隐藏域v查询字符串查询字符串vcookie视图状态v视图状态概述视图状态概述v设置页面是否保留视图状态设置页面是否保留视图状态v在配置文件设置是否保留视图状态在配置文
6、件设置是否保留视图状态设置页面是否保留视图状态v设置设置page指令或指令或page的的enableviewstate属性指示当前页请求结束属性指示当前页请求结束时,该页是否保持其视图状态以及它包含的时,该页是否保持其视图状态以及它包含的任何服务器控件的视图状态任何服务器控件的视图状态 v关闭页面的视图状态关闭页面的视图状态设置页面是否保留视图状态(例)v关闭页面的视图状态关闭页面的视图状态protected void page_load(object sender, eventargs e) page.enableviewstate = false; 在配置文件中设置是否保留视图状态v在配置
7、文件在配置文件web.config的的system.web节点节点下,修改下,修改pages元素的元素的enableviewstate属属性,来控制所有页面是否启用视图状态信息性,来控制所有页面是否启用视图状态信息 对视图状态进行分块v 设置页的设置页的 maxpagestatefieldlength 属性,对属性,对viewstate 属性中存储的数据进行分块,可以在属性中存储的数据进行分块,可以在web.config文件中设置分块大小文件中设置分块大小使用视图状态存取数据使用视图状态存取数据 v视图状态(视图状态(viewstate)是一个字典对象,通过)是一个字典对象,通过page类的类
8、的viewstate属性公开,是页用来在往返行属性公开,是页用来在往返行程之间保留页和控件属性值的默认方法(只在本页程之间保留页和控件属性值的默认方法(只在本页有效)有效)v视图状态可存储的数据类型:视图状态可存储的数据类型:字符串;整数;布尔字符串;整数;布尔值;值;array 和和arraylist 对象;哈希表;自定义类型对象;哈希表;自定义类型转换器转换器viewstateview1 = hello world;【例【例5-1】视图状态示例程序。】视图状态示例程序。参见示例参见示例第第05章章clientstatedemoviewstatedemo.aspx使用视图状态具有以下使用视图
9、状态具有以下3个优点:个优点:耗费的服务器资源较少(与耗费的服务器资源较少(与application、session相比相比)。因为,视图状态数据都写入了客户端计算机中。)。因为,视图状态数据都写入了客户端计算机中。易于维护。默认情况下,易于维护。默认情况下,.net系统自动启用对控件状系统自动启用对控件状态数据的维护。态数据的维护。增强的安全功能。视图状态中的值经过哈希计算和增强的安全功能。视图状态中的值经过哈希计算和压缩,并且针对压缩,并且针对unicode实现进行编码,其安全性要高实现进行编码,其安全性要高于使用隐藏域。于使用隐藏域。使用视图状态具有以下使用视图状态具有以下3个缺点:个缺
10、点:性能问题。由于视图状态存储在页本身,因此性能问题。由于视图状态存储在页本身,因此如果存储较大的值,用户显示页和发送页时的速如果存储较大的值,用户显示页和发送页时的速度可能减慢。度可能减慢。设备限制。移动设备可能没有足够的内存容量设备限制。移动设备可能没有足够的内存容量来存储大量的视图状态数据。因此,对于移动设来存储大量的视图状态数据。因此,对于移动设备上的服务器控件,将使用其它的实现方法。备上的服务器控件,将使用其它的实现方法。潜在的安全风险。视图状态存储在页上的一个潜在的安全风险。视图状态存储在页上的一个或多个隐藏域中。虽然视图状态以哈希格式存储或多个隐藏域中。虽然视图状态以哈希格式存储
11、数据,但它可以被篡改。如果在客户端直接查看数据,但它可以被篡改。如果在客户端直接查看页源文件,可以看到隐藏域中的信息,这导致潜页源文件,可以看到隐藏域中的信息,这导致潜在的安全性问题。在的安全性问题。隐藏域v隐藏域是一个存储库,直接存储在页中的任何特定隐藏域是一个存储库,直接存储在页中的任何特定于页的信息,在视图状态、会话状态和于页的信息,在视图状态、会话状态和 cookie 等方等方法被禁用或不可用,则可以使用法被禁用或不可用,则可以使用 hiddenfield 控件控件来存储状态值来存储状态值 v隐藏域的设置和读取隐藏域的设置和读取protected void page_load(obje
12、ct sender, eventargs e) string strusername = jakey; h1.value = strusername;查询字符串v查询字符串提供了一种维护状态信息的方法查询字符串提供了一种维护状态信息的方法 ,输入查询字符串以问号输入查询字符串以问号 (?) 开始的属性开始的属性/值对,值对,且可以有多个查询字符串,它们之间以且可以有多个查询字符串,它们之间以“&”分隔分隔http:/ 使用查询字符串的优点:使用查询字符串的优点:不需要任何服务器资源。查询字符串包含在对特定不需要任何服务器资源。查询字符串包含在对特定url的的http请求中。请求中。广泛
13、的支持。几乎所有的浏览器和客户端设备均支持使用查广泛的支持。几乎所有的浏览器和客户端设备均支持使用查询字符串传递值。询字符串传递值。实现简单。实现简单。asp.net完全支持查询字符串方法,其中包含了使完全支持查询字符串方法,其中包含了使用用httprequest对象的对象的params属性读取查询字符串的方法。属性读取查询字符串的方法。使用查询字符串的缺点:使用查询字符串的缺点:潜在的安全性风险。用户可以通过浏览器直接看到查询字符潜在的安全性风险。用户可以通过浏览器直接看到查询字符串中的信息。用户可将此串中的信息。用户可将此url设置为书签或发送给别的用户,设置为书签或发送给别的用户,从而通
14、过此从而通过此url传递查询字符串中的信息。传递查询字符串中的信息。有限的容量。有些浏览器和客户端设备对有限的容量。有些浏览器和客户端设备对url的长度有的长度有2083个个字符的限制。字符的限制。cookievcookie概述概述v编写编写cookiev演示和练习:编写演示和练习:编写cookiev编写多值编写多值cookiev演示和练习:编写多值演示和练习:编写多值cookiev控制控制cookie的范围的范围v演示和练习:控制演示和练习:控制cookie的范围的范围v修改和删除修改和删除cookiev演示和练习:删除演示和练习:删除cookie和删除多值和删除多值cookie的子键的子键
15、vcookie和会话状态和会话状态cookie概述vcookie 是存储在客户端文件系统的文本文件中,或者是存储在客户端文件系统的文本文件中,或者存储在客户端浏览器会话的内存中的少量的数据存储在客户端浏览器会话的内存中的少量的数据vcookie 是随页输出并由服务器发送到客户端的特定于是随页输出并由服务器发送到客户端的特定于站点的信息站点的信息vcookie 可以是临时的(随着浏览器关闭而自动消失),可以是临时的(随着浏览器关闭而自动消失),也可以是永久性的也可以是永久性的vcookie 保存在客户端设备上,当浏览器请求某页时,保存在客户端设备上,当浏览器请求某页时,客户端会将客户端会将 co
16、okie 中的信息连同请求信息一起发送。中的信息连同请求信息一起发送。服务器可以读取服务器可以读取 cookie 的值的值cookie的用途v用户的个人配置用户的个人配置v登录和登录和“remember me”v弹出窗口弹出窗口编写cookiev使用使用httpresponse 对象对象 来设置来设置cookie,需要设,需要设置置cookie名称、值、过期时间等信息名称、值、过期时间等信息/通过新建通过新建httpcookie对象来添加对象来添加cookiehttpcookie acookie = new httpcookie(lastvisit);/新建新建httpcookie对象对象ac
17、ookie.value = datetime.now.tostring();acookie.expires = datetime.now.adddays(1);/设置设置cookie的过期的过期response.cookies.add(acookie);/将将cookie添加到添加到cookies集合集合/读取读取cookie值值string username;if (request.cookiesusername != null) username = request.cookiesusername .value; 编写多值cookiev在一个在一个 cookie 中存储多个名称中存储多个名
18、称/值对,名称值对,名称/值对值对称为子键称为子键/直接添加直接添加cookieresponse.cookiesuserinfousername = patrick;response.cookiesuserinfolastvisit = datetime.now.tostring();response.cookiesuserinfo.expires = datetime.now.adddays(1);/读取读取cookie值值string username;if (request.cookiesusername != null) if (request.cookiesuserinfo user
19、name != null) username = request.cookiesuserinfousername ; 控制cookie的范围v限制限制 cookie 的域范围的域范围v将将 cookie 限制到某个文件夹或应用程序限制到某个文件夹或应用程序 控制cookie的范围v限制限制 cookie 的域范围的域范围response.cookiesdomain.value = datetime.now.tostring();response.cookiesdomain.expires = datetime.now.adddays(1);response.cookiesdomain.doma
20、in = support. ;控制cookie的范围v将将 cookie 限制到某个文件夹或应用程序限制到某个文件夹或应用程序httpcookie appcookie = new httpcookie(appcookie);appcookie.value = written + datetime.now.tostring();appcookie.expires = datetime.now.adddays(1);appcookie.path = /app1;response.cookies.add(appcookie);修改和删除cookiev由于由于cookie存储在客户端,不能直接修改和存
21、储在客户端,不能直接修改和删除删除 cookieu通过给通过给cookie赋新值替换旧版本赋新值替换旧版本cookie的办法来的办法来修改修改u可以通过设置可以通过设置cookie立即过期的办法来删除立即过期的办法来删除cookiecookie的应用的应用 一般只要有会员、用户机制的网站或论坛在登录的时候都会一般只要有会员、用户机制的网站或论坛在登录的时候都会有这么一个复选框有这么一个复选框记住我的名字记住我的名字|两周内不再登录两周内不再登录|在此在此计算机上保存我的信息计算机上保存我的信息,说法较多,实现起来差不多,下,说法较多,实现起来差不多,下面就来实现这样一个简单的例子。面就来实现这
22、样一个简单的例子。【例【例5-3】演示】演示cookie的使用。的使用。 参见示例参见示例第第05章章clientstatedemocookiedemo.aspx 服务器端状态维护技术v会话状态会话状态v应用程序状态应用程序状态会话状态v会话标识符会话标识符v配置会话状态配置会话状态 v会话状态事件会话状态事件v会话状态变量的使用会话状态变量的使用 v会话状态的利弊会话状态的利弊 v会话状态是会话状态是asp.net中非常重要的服务器端状态管中非常重要的服务器端状态管理技术,同时也是功能很强大的状态管理技术。理技术,同时也是功能很强大的状态管理技术。v会话状态是特定于用户的,当一个用户开始访问
23、会话状态是特定于用户的,当一个用户开始访问web应用程序时,将会产生一个会话状态。应用程序时,将会产生一个会话状态。v不同的用户具有不同的会话状态,如果有一万个用不同的用户具有不同的会话状态,如果有一万个用户,将会有一万个会话状态。户,将会有一万个会话状态。v会话状态在存储与用户相关的信息方面非常有用,会话状态在存储与用户相关的信息方面非常有用,如博客登录后就可以使用会话状态存储通过验证的如博客登录后就可以使用会话状态存储通过验证的用户信息。用户信息。会话标识符v浏览器的会话使用存储在浏览器的会话使用存储在 sessionid 属性中的唯一属性中的唯一标识符进行标识标识符进行标识v会话会话 i
24、d 使使 asp.net 应用程序能够将特定的浏览器应用程序能够将特定的浏览器与与 web 服务器上相关的会话数据和信息相关联服务器上相关的会话数据和信息相关联v会话会话 id 的值在浏览器和的值在浏览器和 web 服务器间通过服务器间通过 cookie 进行传输,如果指定了无进行传输,如果指定了无 cookie 会话,则通过会话,则通过 url 进行传输进行传输 会话标识符v无无cookie的的sessionidu将将web.config 文件的文件的 sessionstate 节的节的 cookieless 属性设置为属性设置为 true,可以指定不将会话,可以指定不将会话标识符存储在标识
25、符存储在 cookie 中,而是存储在中,而是存储在url中中 http:/localhost:10765/statemanagedemo/(s(hfuvhje2whhmnhyaocja54r0)/default.aspx会话标识符会话标识符配置会话状态配置会话状态 v会话状态模式概述会话状态模式概述uasp.net 会话状态支持若干用于会话数据的存储会话状态支持若干用于会话数据的存储选项选项u在在 web.config 文件中为文件中为 sessionstate 元素的元素的 mode 属性分配一个属性分配一个 sessionstatemode 枚举值,枚举值,可以指定可以指定asp.net
26、 会话状态使用的模式会话状态使用的模式配置会话状态(续)配置会话状态(续) vinproc模式(进程内模式)模式(进程内模式)u是默认会话状态模式,使用是默认会话状态模式,使用sessionstatemode枚举的枚举的inproc值指定值指定u进程内模式将会话状态值和变量存储在本地进程内模式将会话状态值和变量存储在本地 web 服务器的内存中服务器的内存中u是唯一支持是唯一支持 session_end 事件的模式事件的模式配置会话状态(续)配置会话状态(续) vstateserver模式(状态服务器模式)模式(状态服务器模式)u会话状态存储在一个称为会话状态存储在一个称为 asp.net 状
27、态服务的进程状态服务的进程中,该进程是独立于中,该进程是独立于 asp.net 辅助进程或辅助进程或 iis 应用应用程序池的单独进程程序池的单独进程u使用此模式可以确保在重新启动使用此模式可以确保在重新启动 web 应用程序时保应用程序时保留会话状态,并使会话状态可用于网络场中的多个留会话状态,并使会话状态可用于网络场中的多个 web 服务器服务器 配置会话状态配置会话状态 (续)(续) vsql server模式模式u会话状态存储到一个会话状态存储到一个 sql server 数据库中数据库中u可以确保在重新启动可以确保在重新启动 web 应用程序时保留会话状应用程序时保留会话状态,并使会
28、话状态可用于网络场中的多个态,并使会话状态可用于网络场中的多个 web 服服务器务器 配置会话状态(续)配置会话状态(续) vcustom摸式(自定义模式)摸式(自定义模式)u指定使用自定义会话状态存储提供程序来存储会指定使用自定义会话状态存储提供程序来存储会话状态数据话状态数据u在在web.config中配置中配置sessionstate 的提供程序为的提供程序为自定义的会话状态存储提供程序自定义的会话状态存储提供程序voff模式:此模式禁用会话状态。模式:此模式禁用会话状态。 会话状态事件v在在global.asax文件编写用于管理用户会话的文件编写用于管理用户会话的事件:事件:usess
29、ion_start 事件:在新会话开始时触发事件:在新会话开始时触发usession_end 事件:在会话被放弃或过期时触发事件:在会话被放弃或过期时触发 vsession_start事件:事件:通过向通过向global.asax文件添加文件添加一个名为一个名为session_start的事件过程来处理。如果的事件过程来处理。如果请求开始一个新会话,请求开始一个新会话,session_start事件过程会事件过程会在请求开始时运行。如果请求不包含在请求开始时运行。如果请求不包含sessionid值值或请求所包含的或请求所包含的sessionid属性引用一个已过期的属性引用一个已过期的会话,则会
30、开始一个新会话。可以使用会话,则会开始一个新会话。可以使用session_start事件初始化会话变量并跟踪与会话事件初始化会话变量并跟踪与会话相关的信息。相关的信息。vsession_end事件:事件:通过向通过向global.asax文文件添加一个名为件添加一个名为session_end的事件过程来的事件过程来处理。处理。session_end事件过程在调用事件过程在调用abandon方法或会话过期时运行。如果超过方法或会话过期时运行。如果超过了某一会话了某一会话timeout属性指定的分钟数并且属性指定的分钟数并且在此期间内没有请求该会话,则该会话过期。在此期间内没有请求该会话,则该会话
31、过期。会话状态变量的使用会话状态变量的使用 v向会话状态添加项向会话状态添加项u以键以键/值对形式直接向值对形式直接向session中添加项以持久保中添加项以持久保留值留值 ,并且根据添加的键名称访问会话状态的值,并且根据添加的键名称访问会话状态的值/添加添加sessionusername =mary;或:或:session.add(username ,mary); /访问访问if(session username != null) string strusername = session username.tostring();会话状态变量的使用会话状态变量的使用v会话的过期会话的过期u配置
32、会话过期时间,默认过期时间为配置会话过期时间,默认过期时间为20分钟分钟u编写代码设置编写代码设置session对象的对象的timeout属性,来属性,来设置会话状态过期时间设置会话状态过期时间void session_start(object sender, eventargs e) session.timeout = 30; 使用会话状态v删除会话状态中的项删除会话状态中的项u调用调用session对象的对象的clear和和removeall方法来删除方法来删除会话状态集合中的所有项会话状态集合中的所有项u调用调用remove和和removeat删除其中的某一项删除其中的某一项u调用调用a
33、bandon方法取消当前会话,即会话立即过期方法取消当前会话,即会话立即过期session.remove(username);session. abandon();【例【例5-4】演示会话状态变量的使用。】演示会话状态变量的使用。参见示例参见示例第第05章章serverstatedemologin.aspx 和和hello.aspx 会话状态的利弊会话状态的利弊 使用会话状态的优点:使用会话状态的优点:v实现简单。实现简单。v会话特定的事件。会话特定的事件。v数据持久性。数据持久性。v平台可伸缩性。平台可伸缩性。v无需无需cookie支持。支持。v可扩展性。可扩展性。使用会话状态的缺点:使用会
34、话状态的缺点:v使用会话状态时,要注意其性能问题。使用会话状态时,要注意其性能问题。 应用程序状态v应用程序状态概述应用程序状态概述v添加和读取应用程序状态中的值添加和读取应用程序状态中的值v演示和练习:使用应用程序状态来存储信息演示和练习:使用应用程序状态来存储信息v删除应用程序状态的值删除应用程序状态的值应用程序状态概述应用程序状态概述v应用程序状态是一种全局存储机制,可以供应用程序状态是一种全局存储机制,可以供web应应用程序中的所有页面(或用程序中的所有页面(或global.asax文件)访问文件)访问v存储在存储在httpapplicationstate 类的实例中,该类在类的实例中
35、,该类在客户端第一次从某个特定的客户端第一次从某个特定的 asp.net 应用程序虚应用程序虚拟目录中请求任何拟目录中请求任何 url 资源时创建资源时创建 v目的在于存储需要在服务器往返行程之间及页请求目的在于存储需要在服务器往返行程之间及页请求之间维护的信息之间维护的信息 添加和读取应用程序状态中的值v应用程序状态存储在一个键应用程序状态存储在一个键/值字典中,可以将特定于值字典中,可以将特定于应用程序的信息添加到此结构以在页请求期间读取它应用程序的信息添加到此结构以在页请求期间读取它v一般在一般在global.asax文件中的应用程序启动事件中初文件中的应用程序启动事件中初始化应用程序状态值,而在所有的页面中都可以访问始化应用程序状态
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府单位采购规章制度
- 药品器械采购相关制度
- 外发采购流程管理制度
- 外协采购内部制度
- 国营企业采购制度
- 商品采购业务内控制度
- 敬老院采购内部控住制度
- 规范公司采购财务制度
- 学校自行采购装备制度
- 政务采购业务管理制度
- 2026年江苏经贸职业技术学院单招综合素质考试题库附答案详解
- 2026河北衡水恒通热力有限责任公司公开招聘工作人员28名笔试备考试题及答案解析
- 2026春统编版(新教材)小学道德与法治一年级下册(全册)各单元知识点复习课件
- 吉水县2026年面向社会公开招聘农村(社区)“多员合一岗”工作人员【146人】笔试备考试题及答案解析
- 2026年常州工业职业技术学院单招综合素质考试题库附答案详解(达标题)
- 2026届高考语文复习:古代诗歌鉴赏课件
- 《工程勘察设计收费标准》(2002年修订本)-完整版-1
- 有限公司450m3高炉项目初步设计安全专篇
- 热学李椿 电子
- 教学能力比赛决赛 《英语》教案
- 勘探监督手册测井分册
评论
0/150
提交评论