如何管理ASPNET中的页面状态.docx
- 文档编号:12127147
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:9
- 大小:23.99KB
如何管理ASPNET中的页面状态.docx
《如何管理ASPNET中的页面状态.docx》由会员分享,可在线阅读,更多相关《如何管理ASPNET中的页面状态.docx(9页珍藏版)》请在冰豆网上搜索。
如何管理ASPNET中的页面状态
如何管理ASP.NET中的页面状态
如何管理ASP.NET中的页面状态
HTTP协议属于网络应用层协议,适用于分布式超媒体信息系统。
在WWW网络中使用HTTP协议,用于网页数据传输。
HTTP协议有如下特点:
支持CS模式。
HTTP协议允许传输任意类型的数据对象,包容性强,数据传输范围广。
客户向服务器发出请求,只需传送请求方法、路径。
HTTP服务端规模小,通信代价低。
HTTP协议规定客户与服务器之间无连接,即每次连接只处理一个请求。
服务器处理完成客户请求并收到应答后,连接断开。
HTTP协议是无状态协议。
无论是客户端还是服务器端对于事务处理都不保存状态信息。
HTTP协议是一种无状态协议,每次WEB请求后客户端和服务器端就会断开、隔离,不再有联系,服务器内存中无需保存被请求的WEB页面状态。
这种架构节省了服务器资源,保证了WEB服务器同时响应千万个并发请求而不会崩溃。
但是,这种架构的缺点也是显而易见的:
WEB页面状态在很多情况下都非常必要,必须通过其他手段保存WEB请求的信息,并在需要时得到这些数据。
针对上述问题,ASP.NET中设计了多种方法维持管理WEB页面状态,适用于解决不同情况下的问题。
ASP.NET中管理WEB页面状态分成基于客户端的状态管理和基于服务器的状态管理2种形式。
基于客户端的状态管理是在网页中或客户端计算机上存储信息,在信息请求数据传输的往返行程中不会在服务器上保存信息。
主要技术有视图状态,控件状态,隐藏域,Cookie和查询字符串等。
基于服务器的状态管理用于维护服务器上的状态信息,保留状态信息一方面可以减少发送给客户端的通信量,另一方面可能会加重服务器的负担。
主要技术有应用程序状态,会话状态,配置文件属性和用户自定义维持等。
1、视图状态、控件状态和隐藏域
视图状态指在当前页面隐藏若干字段,通过序列化把状态数据转换成比特流添加到其中,并在页面回发过程中保持。
ASP.NET中使用视图状态在请求WEB页面与服务器回发间保存属性值,并于回发后在当前页面将其恢复。
视图状态是一种轻量级的状态管理方法,数据隐藏在页面中,而不用消耗有限的服务器资源,不会给服务器增加额外负担。
视图状态是单个页面保存信息的最佳选择,并且ASP.NET中WEB控件也使用视图状态在回发间保存属性值。
视图状态的局限是状态数据和特定页面捆绑,当页面转换时,这些数据会丢失;默认视图状态数据并不是加密的,并不安全。
如果选择加密,每次回发WEB服务器都需要加密和解密,这会占用大量服务器资源;另外,如果保存的状态数据非常多,就会减慢网络传送速度。
去除非必要的视图状态可以减少页面传输时间,ASP.NET中的VieStateMode属性可以禁用整个页面的视图状态,也可以为只为需要视图状态的控件开启视图状态。
C#中可以设置:
Page.EnableVieState=false关闭视图状态。
如果页面隐藏字段中数据量过多,有些防火墙可能禁止访问此页面。
视图状态分块可以避免这一问题。
有时网页中控件需要按顺序存储状态数据,为了保证控件正确运行,该控件需要保持某些必须的数据,视图状态可以解决这一问题,但视图状态是可以被关闭的。
一旦视图状态关闭,就无法保证该控件正常运行。
ASP.NET中控件状态可以维持某个控件的属性信息,但是不能像视图状态那样被关闭,从而能够保证页面控件按预期运行。
控件状态只适用于服务器控件,不能用于普通Web页面控件,并且要开发人员编写少量代码进行维护。
使用控件状态的主要步骤为:
注册需要维持信息的控件。
保存状态数据。
加载保存后的状态数据。
控件状态使用的服务器资源较少,性能可靠,又比较灵活,不过控件状态是一个自定义的状态保持机制,开发人员需要编写代码来控制保存和加载控件状态。
隐藏域指在页面中加入隐藏控件,向服务器发出请求时,数据赋值给该控件并提交到面,从而实现了数据在页面之间传递,保存了页面状态。
在隐藏域保存数据即对控件value属性赋值,取出数值即得到控件value属性值。
Web页面中其它普通控件设置隐藏后也可以得到类似功能,但是隐藏域中保存的数据不会直接显示页面可视化设计视图中,用户根本看不到相关这样,在传递不想让用户关心的数据时,隐藏域更合情合理。
在ASP与ASP.NET中,隐藏域都可以保存页面信息,作为维护页面状态的一种技术。
隐藏域是标准HTML控件,实现简单不需要复杂编程,并且仅在页面上存储和读取,不需要动用服务器资源。
但是隐藏域安全性不高,如果存储了较多值,会导致性能下降,并且隐藏域可以存储的数据结构较少,仅仅支持简单的数据结构。
所以,往往在仅需要传递少量简单数据时使用隐藏域。
2、查询字符串和COOKIE
查询字符串指URL中使用简单字符串在页面间传递信息。
这是一种轻量级的页面状态管理方法,仅仅传递简单字符串,并不会加重服务器负担。
查询字符串需开发者自行放置字符串信息,但是很容易在页面间传送。
例如,可以使用查询字符串将商品的ID从介绍页面传递到购物车界面,保存购物商品的信息;搜索引擎在查询时,根据查询内容重定向一个新的URL.查询字符串的局限在于,字符串数据长度有限制,传递数据量很少,并仅限于简单字符串;用户输入新的URL或关闭浏览器时查询字符串会丢失;页面状态信息传递仅限于当面页面到目标页面,且传递内容是明文,容易被用户篡改。
COOKIE是由服务器端生成的一组信息数据,由服务器端发送给客户端浏览器。
浏览器将COOKIE保存到本地磁盘某个目录下的文件中。
COOKIE是在用户硬盘上创建的文件,保存WEB应用程序中少量的页面状态信息,一般是简单的字符串数据。
同一COOKIE可以被多个页面使用并可以被不同时间多次访问。
例如,可以把登录页面的用户名密码保存到COOKIE中,下次用户请求页面时自动填充上去,以节省用户的输入操作。
COOKIE的局限在于,数据由开发人员设置,保存在客户计算机上。
这样,数据很容易被用户修改,很不安全;且保存数据量很少,不适合保存复杂或大量的数据。
用户也可以自己设定关闭或启用COOKIE,这就给开发人员带来一些不确定因素。
页面状态一般不完全依赖COOKIE工作。
3、会话状态和应用程序状态
会话状态即SESSION,可以在一个页面保存信息而在另外页面使用这些信息,实现复杂状态信息的跨页传递,保存信息支持包括字符串在内的自定义复杂数据类型。
会话状态对当前用户而言,在整个应用程序中可见,是跨页面保存信息的较佳方法。
会话状态信息一段时间没有激活就会超时丢失,且数据保存在服务器端,非常安全。
例如,用户成功登录后,可以用SESSION记录下用户ID,方便以后购物结算使用。
会话状态的局限在于,每次提出新的请求时,ASP.NET都会产生一个新的会话ID并需要跟踪会话信息。
每个客户端都有不同的会话并且包含不同的信息,状态信息会占用WEB服务器的资源,数据量越大、访问用户越多占用资源越多。
应用程序状态中保存可以被所有客户端访问的全局对象。
与会话状态相似,都在服务器上保存信息并使用相同的语法。
因为状态数据不会被传送到客户端,所以非常安全。
例如,可以在应用程序状态中保存页面访问计数器,记录所有访问此页面的客户信息。
应用程序状态的局限在于,自WEB程序运行始,状态数据不会超时过期,一直到应用程序关闭。
存储大量数据会导致服务器性能显着下降,有大量访问时更突出。
应用程序状态效率不高,不太经常使用,经常被改写的数据更不应该放在其中。
4、配置文件属性
ASP.NET中配置文件属性的功能可以存储维持特定访问用户的数据。
用户访问页面,可以根据已存储的数据向用户显示个性化网页版本。
个性化的网页可能需要许多的数据,并且个性化网页是针对用户个人的,必须使用唯一的用户标识存储信息,以便用户访问时识别用户。
如果访问用户过多,所需数据将是海量的。
会话状态可以实现类似功能,但是在用户的会话过期后,会话状态就会丢失,配置文件数据却是永久保存的,并且与某个特定用户关联。
开发人员也可以自己创建和维护用户数据数据库,这需要复杂的代码表示逻辑关系,配置文件属性提供一项通用存储功能可以存储任何类型的对象数据来管理用户信息,并且可以在应用程序的任何位置访问使用用户信息。
使用配置文件属性,首先对Web应用程序的配置文件提供程序进行配置。
ASP.NET中SqlProfileProvider类负责将配置文件数据存储到数据库,该类是执行存储和检索配置文件数据等任务的基础类。
在Web应用程序中,可以直接把要存储的值赋值给配置文件属性,不需要确定当前用户身份,无需显式执行任何数据库查找,配置文件功能对开发人员是透明的,会智能地解决这些问题。
配置文件功能只须获取特定属性值,根据属性值标识当前用户,并执行数据查询及保存操作。
开发人员也可以创建自己的配置文件提供程序类,用XML文件等自定义格式将配置文件数据存储到自定义存储机制中。
5、自定义页面状态管理
ASP.NET中可以使用服务器资源来存储状态信息,自行编写代码进行状态管理。
自定义状态管理灵活性较好,并可以保存大量有用数据,典型的应用是使用服务器端数据库来保存数据。
例如,网站购物车中信息可以写入数据库,永久保存,在页面转换或用户再次登录时读取数据库,再次显示到购物车中。
自定义页面状态管理的局限是连接数据库并从中读写数据要占用服务器资源并消耗网络传输时间,通常会降低一些性能;而额外的代码编写会增加开发WEB程序的复杂度。
6、结语
WEB请求产生的信息有些是用户相关的,有些是WEB应用程序全局的,而ASP.NET使用非连接架构,需要显式保存和读取这些信息。
本质上,页面状态管理是在WEB请求之间保存信息的技术。
ASP.NET为状态管理提供了多种选择,各种状态管理方法对WEB应用程序的性能和安全影响各异。
ASP.NET中不同的状态管理又是互补的,可以在一个WEB应用程序中结合使用。
程序员可以根据处理数据需要的性能和安全性进行合适的选择。
MattheMaDonald。
ASP.NET4高级程序设计.4版。
北京:
人民邮电出版社,201X.
王红霞。
利用ASP.Net技术实现基于BS模式的通用查询.计算机工程与设计,201X。
毛德祥。
基于ASP.net技术的Web应用程序三层设计模型.微型电脑应用,201X。
附送:
如何给女朋友写道歉信
如何给女朋友写道歉信
如何给女朋友写道歉信我们一起走过5个年头,你是我这一生中最喜欢的人,也是我最爱的人。
我觉得,世间万般生命能够互相撞击出灿烂的火花的总是一段缘,这段缘,让我一辈子魂千梦绕,这段缘,让我怀想一生,维系一生。
就像你当初与我相遇一般,那次你给我面包吃我正在那郁闷,我对你说了一句我要找女朋友,你突然的就答应做我的女朋友了,就这样我们走在了一起,我们相爱了。
因有了一个爱字,事物便有了价值,于是,我觉得:
爱情无价!
偶一得之,收藏起来,更为珍视。
那天的事是我不好,我不应该骂你,不应该说那些对不起你的话,本身给你买个便宜的手机就是我的不对,我还对你发脾气真是不应该,哎!
总之千错万错都是我的错。
回想以下以前,你我说好不分开,可现在又是怎么了?
自从那天我们吵架以后我给你打电话你也不接发信息你也没回,我一天24小时不间断的给你打电话,你的回答就是你行了吧,冬冬,我心里真的很难受,我对不起你真的对不起,原谅我吧,好好过日子吧,你不理我我的心都凉了,别生气了好吗,我知道我对不起你,你不要在生气了啊。
你不理我的这几天里,我经常能听到我们在一起时你叫我老头时可爱的样子。
我恨我自己,我真的太混蛋了。
不知道为什么我这几天一想你就想到你的好,一想我自己就觉得错全是我的,我觉得我真的很对不起你。
在梦里我梦到了以前在学校时,你叫我“老头”“啊?
”“我然而那天,你对着我笑,笑得那么的灿烂,我想,你大概已不再生我气了吧。
但我却感到很愧疚,我觉得自己真的很小气...nash,如果你还舍不得我的话,就请原谅我吧。
如果舍得的话,也不必在意我的感受,我的心理承受能力已比高一好多了...如何给女朋友写道歉信给女朋友的道歉信在一起一年多来,我为我的所作所为感到非常羞愧,现在,我只能说声:
对不起,不望你能原谅我。
是我的错,我不该不去学会吸烟、汹酒,因为我不会吸烟、汹酒和讨厌烟味,搞的我无法溶入你的朋友圈里,无法跟他们一样随口成脏。
是我的错,我不该在你朋友过来一起住的时候却不主动陪他们聊天说话,没有尽到地主之谊。
是我的错,我不该老是买便宜不超过一百块的化妆品给你,而且老是自己作主买却不问过你喜不喜欢。
是我的错,是我不该因为你月经不调、内分泌失调去到处请教别人,还特地给你买阿胶补血给你吃,搞的你皮肤变白变红嫩却把其他斑斑点点因皮肤变白而显得更明显了,以致老是被你抱怨我不会买东西。
是我太傻,没有学你一样带异性朋友回来一起住而不理会他人的诽议,甚至不避嫌跟他们混在房间里却把自己的男朋友丢外面,因为你说过你跟你的朋友都是这样的,不信可以去问问,而我却始终没有去问过是否确实如此。
是我太笨了,没有学你一样跟异性朋友在外面玩到
十一、二点不归,因为你说你原来也是这样过的,并没有不对,而我却因此跟你捞叨了好久。
是我错了,我不该只顾给我妹读书报名的钱,只顾平时省吃俭用存钱还给因借钱给我妹报名读书而欠我朋友的钱,却给你很少的钱话,搞得你本来可以去超市大采购的现在却很少去了。
是我错了,我不该几个月前不听你的话,关电视的时候直接按电视机上的电视开关而不学你一样直接用遥控器关,也不学你电视没关就去弄电源插头搞的电视又开又关老是电流冲击损耗电视机里的电子元件。
昨晚电视烧掉了,我不该不承认自己以前没有听你话按过一次电视上的关机按钮而导致现在烧坏,更不该不告诉你我在找维修店准备拿过去修。
是我错了,我不该再跟你不喜欢的、一直以来都默默无私帮助过我的朋友联系。
我应该为了你而丢弃曾经帮助过我正常交往的异性朋友,为了你而情愿让她们说我无情无义的人。
是我错了,我应该学会说脏话,学你随口就能说出脏话而不必感觉不好意思、脸红。
是我错了,我不该明明知道你不喜欢我碰,却老是碰你、牵你的手,我应该学会自己安慰自己,不应才两个月就搔扰你一次。
是我错了,你说你的人都给了我,就是让我平时下班能看到你就可以而且还要负责养你、疼你,而自己却绝对不能祈求有所回报,因为能给我看见你的人就算是已经把你的人给我了。
是我错了,我不该你做好了饭菜不亲口对你说很好吃,就算咸的要命也应该说刚刚好。
很好吃。
是我错了,我不该老是在你说吃完饭我负责洗碗才去洗碗,应该没吃完之前就主动说我来洗碗。
是我错了,我没有意识到男朋友就是应该给钱女朋友花,男的干死干活怎样去挣钱根本就不管女朋友的事。
女朋友就应该呆在家里不用做事等着男朋友来养才算是真正的男、女朋友,这样的男朋友才是称职的。
是我错了,我不该回去就对着电脑发泄自己的情绪、烦恼,应该陪着你,看着你玩电脑,看美少女战士,因为我根本就不应该有烦恼。
是我错了。
我不该老是抱怨你不懂得反省自己,不该不按照你的意思去做人,因为我根本就不需要有自己的思想。
是我错了,每次提醒你做的太过份的时候不接受你对我的教训,更不应该期望我说的话你能自己反省,因为每次说到最后你都会说:
我不是一个完美的人,我的生活方式就是这样的。
我应该接受你的这种借口而放弃对你错误的指出。
因为我根本就不配指出你的错误,你做的永远是正确的,永远是对的。
是我错了。
我没有做到你心中所谓的男子汉,没有做到像包养二奶一样包养你,没有做到什么事情都应该我去做、我去处理。
因为你认为男人生来就是为了女人更好的生活而出生的,而我却没能做到。
是我错了,我抛去了关心我的朋友,却还没有得到你的正眼相看,我太失败了,根本就不配当你的男朋友。
为了你,我可以说已经彻底变了另外一个人了,还是没法达到你的要求。
也许你说的对,我们还是不太适合。
我只能祈求你原谅我浪费了你一年的青春。
这是我第三次向你认错。
以后都不会再有了。
谢谢你一年来一直容忍我这个这么差劲的男朋友。
给女朋友的道歉信很抱歉,跟着我让你受了很久的委屈。
我知道早该写这封信,却拖到今日才付诸实现,希望你能接受这迟来的道歉。
从懂事以来,我便嫌你厚厚一坨,还用话语讥笑你:
“剁一剁,都可以切一盘”,恶意影射你像面摊的猪舌头卤味。
我那样笑你,其实只是反映我的心虚罢了。
不知道我中什么邪,从来都无法欣赏你,即使不少人跟我说,厚嘴唇的人很重情意,或者丰满双唇的人很性感,我都听不进去。
跟被鬼打到一样,莫名地,我就是嫌你长在那里挺碍眼。
有时候,当我照镜子,还会故意抿紧双唇,看看唇形能否比较细线条一点。
说起来,我那副抿嘴唇作假的嘴脸才真是丑!
回想过去,我们并不是没有拥有过美好时光,例如品尝美味时,你总是在我身边,与我共享。
可不是吗?
游历天涯,我们一起吃了不少世界美味。
记得我们在阿姆斯特丹的第一晚吧,在一家道地的荷兰餐厅内,好心的老板瞧出我们是异乡人,特别当地佳肴“青豆汤”,浓稠的橄榄色绿汁,入嘴香醇,吃得我满嘴生津。
幸好当时有你在场,跟我诉说汤的滋味,你吱吱作响,发出一连串满意的叹,增进了我的食欲。
我想,一个人独自用餐,再好吃的美味都会逊色啊。
还有,你也为我亲吻了许多在我生命中值得纪念的人,他们或许都成了过客,但谢谢你保留了我对他们的记忆。
嘿,你总该听过“午夜香吻”那首老歌吧?
我深刻地思量,对你的挑剔,说穿了,完全不是你的错,甚至应该说根本与你无关。
这种心理源自我的老-毛病,总是羡慕我没有的东西,握在手上的反而不去重视,一径觉得别人的比较好。
换句话说,即使我换了一双薄唇,恐怕以我这个心态,还是照样嫌弃它,眼光一样往外看,说不定反而变成羡慕别人的厚嘴唇呢。
给女朋友的道歉信自从认识你以后,我才知道自己身上的缺点这么多,一时间都无法相信自己的耳朵,无法相信自己的过错。
在一连串的事情发生后,才渐渐意识到是自己的错,但当时没勇气向你承认和低头,害怕被批评、害怕言语上的正面冲突。
古人云“良药苦口利于病,忠言逆耳利于行”,你说的话都很有道理,也能确凿真实的感情,每当听进“逆耳”的话后,我就感觉浑身不自在,因而在你说我时候就产生一种负面情绪,激动得控制不了自己,从而考虑不到你内心的感受,往往因为自己的固执,说出那些严重的损伤彼此的感情的话……在此,我真诚地向你说一声:
老婆,对不起!
是我不好,都是我的错!
事情过后,我是多么的后悔,多么的自责,可在你面前我仍无法表达出来,那种承认错误的勇气还是不够足。
经常听你说,男人要勇于承担、包揽责任,知错认错,做到真诚。
也许,在你心中我就是一个情感胆小鬼,怕这怕那,拿不起放不下,斤斤计较,这些怎么能成为一个男子汉,怎么保护你,怎么能做你未来的老公,怎么支撑一个家呢?
没错,你心中的顾虑也是我的顾虑。
“不服输,不认软”是我性格的一面,在正面竞争中可以激励我奋进,但遇到过失、过错就难于承认,是我要命的缺点。
现在,我已经明确认识到自身问题,我想摆脱这样的“高姿态”,做到真正的真诚,和你在一起。
习惯是自小养成的,改掉这些弊病对我来说就像别人戒烟、戒酒一样,但我已经痛下决心要改掉那些缺点,并在我们发生矛盾时不再逃避,虽然我不太会哄人,但我会尽力去哄你的,宝贝!
我给自己定了期限,从现在起一个月内调整自己的性格、说话方式以及对你的态度,看我的表现吧。
我想做的更好!
我想好好爱你,因为你在我心里很重要,你是我的唯一,我最在乎的就是你,我舍不得你,没有你我的生活一片狼藉!
老婆,我爱你!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 如何 管理 ASPNET 中的 页面 状态