Asp.net常用状态管理方案分析

转载 2007年09月29日 14:48:00
Asp.net常用状态管理方案有:

视图状态View state
隐藏域
Hidden Fields
Cookies
Query string
Application state
Session state
Profile

其中View state, hidden fields, cookies, and query strings将值以不同的方式保存在客户端。而application state, session state, and profile则在服务器端将值以不同的形式保存起来。 

视图状态(View state

View state会自动保存web页面各个元素的值,只要控件的EnableViewState=true. ViewState以键值对的形式存储元素的值.asp.net,view state的值是以隐藏域的形式通过哈希的方法存储在页面中,形同:

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJNzgzNDMwNTMzZGTN7+FHXsyXJ2Jnzu0UxkEXCEetrg==" />

如果使用View state来存储数据,那么数据的大小不能超过pageMaxPageStateFieldLength定义的值.


优点
:
无需服务器端资源,由于view state是保存在页面中的,所以无需借用服务器端资源保存值的问题.
使用简易,只须以键值对的形式即可保存元素的值.
安全性方面由于view state保存的值是经哈希处理并且压缩过的,所以使用起来要比Hidden Fields安全.

缺点:
性能问题,正因为view state将值保存在Page,因此每次在加载页面过程中都会去装载view state中保存的值,因此带来性能的损耗.
安全问题,虽然view state保存的值是经哈希处理并且压缩处理的,但在页面中仍然以hidden fields的形式存在,仍然易被黑客截取并利用.


隐藏域
(Hidden Fields)

这是古老的asp保存元素值的一种方式.使用Hidden Fields取决于页面提交数据的方式.必须通过Post方法提交,才能取得Hidden Fields的值,如果使用Http Get方法,则该Hidden元素的值无效。

Hidden Fields另外一个特点就是,它保存元素的值在Html代码中是以明文的方式保存的。可以很方便地查看页面html源代码得到hidden fields元素的值。

优点:
使用方便, 适用范围广,几乎所有的浏览器和客户端设备都支持hidden fields这种形式.

缺点:
非常不安全
只能存储非常简单的数据,如string类型
性能问题,使用hidden fields如同view state一样每次页面显示都要加载. 


Cookies

Cookies也是在客户端存储数据的一种形式。Cookies可以长期保存数据,也可以暂时保存数据,这依赖于cookies的过期时间设置。Cookies对应的作用范围是整个web站点,而不是某个页面,它依赖于浏览器进行管理,如果客户端浏览器禁用Cookies,那么就无法启用Cookies在客户端保存数据。Cookies伴随着页面的请求将数据发送到服务器端,它的值可以通过Request来获取。大多数浏览器支持Cookies能够存放4M字节的数据,同时浏览器对机器能够容纳的Cookies数也有限制,一般地,允许每个站点最多可以产生20Cookies

读取Cookies的值:
if (Request.Cookies["UserSettings"] != null)

{

    string userSettings;

    if (Request.Cookies["UserSettings"]["Font"] != null)

    { userSettings = Request.Cookies["UserSettings"]["Font"]; }

}

Cookies写值:

Response.Cookies["UserSettings"]["Font"] = "Arial";

Response.Cookies["UserSettings"]["Color"] = "Blue";

Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(1d);

优点:

可以配置过期时间
无需占用服务器端资源
简单易用
也可以保持持久数据

缺点:
大小限制,大多数浏览器置支持4M字节。
受到用户配置限制,如果浏览器禁用Cookies,那么该项功能就没法使用
潜在的安全隐患。 由于Cookies是以文本文件的形式存放在客户端机器中,虽然Cookies的内容经过哈希,但仍然可以被人获取并利用。
 

查询字符串 

查询字符串就是在页面的URL后面加上一些参数,通过这种形式进行页面之间的值传递。它提供了非常方便的页面传值方式。
形如:
http://www.abc.com/list.asp?id=1098&type=a100

优点:
简单方便,应用非常广泛

缺点:
极不安全,非常有必要借助于URLEncodeURLDecode对字符串进行处理以增强安全。
大小受到限制,一些浏览器或客户端设备只支持长度为2083URL字符串。

 

Application State

Asp.net允许你以Application state的方式存储值--它是HttpApplicationState类的一个实例。Application state提供一个全局的存储方式,可以被web 应用程序的每一个页面获取。Application stateSession State一样,以键值对的形式存储值。

优点:
全局范围

缺点:
全局范围
占用服务器资源
脆弱性,由于Application State是存储在内存中,因此当应用程序停止或重启时会丢失。
扩展性差,无法在多个服务器或多个处理器之间共享。

 
Session State 

Session StateApplication state有点类似,但它作用于浏览器的会话中。如果不同的用户使用你的应用程序会产生不同的session会话。Session state也是以键/值对的形式存储数据。  

优点:
使用方便
数据持久,因为asp.net提供的Session克服了原来asp进程依赖性的缺陷,可以将Session保存在数据库中,因此session的数据永久不会丢失。
无需Cookies支持,这也是asp.net的一大改进之处,可以在ASP.NET中客户端的Session信息以Cookieless方式存储。

 缺点:
由于Session变量存储在服务器端,因此占用服务器端资源。

 
Profile

Profile的形式存储数据是asp.net2.0提供的一个新功能。它是将信息存储在数据库中的,因此永久不会丢失信息。

优点:
数据持久性
可扩展 

缺点:
由于profile将数据存储在数据库中,因此存在以下特点,
需要人工维护数据,
性能略差

 

ASP.NET的状态管理详解以及总结

一、 状态管理的基本概念 1、 什么是“状态管理”?——数据缓存和数据传递 所谓“状态管理”,是指使用ASP.NET中的ViewState、Cookie、Session和Application...
  • qq_27825451
  • qq_27825451
  • 2016年12月30日 18:21
  • 1094

asp.net 状态管理方案总结

每次将网页发送到服务器时,都会创建网页类的一个新实例。在传统的Web编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失。例如,如果用户将信息输入到文本框,该信息将在从...
  • ydm19891101
  • ydm19891101
  • 2016年02月18日 15:24
  • 2728

ASP.NET 状态管理(视图状态 ViewState)

无论 Web 程序框架多么先进,它都不能改变一个事实:HTTP是一种无状态协议。        每次 Web 请求后,客户端和服务器端断开,同时 ASP.NET 引擎释放页面对象。这种架构保证了...
  • dragon_ton
  • dragon_ton
  • 2015年09月27日 23:44
  • 640

如何利用BI实现人力资源可视化管理

某电信集团在力资源信息化管理上存在业务线程多,人员信息与其他系统内信息交叉多的问题,对人力部门来说,公司人员、岗位、薪酬、KPI等资源的调整指导没有实际的可视化的参考,很多调整还是靠着人为的判断和操作...
  • yuanziok
  • yuanziok
  • 2016年05月24日 13:41
  • 6053

ASP.NET 状态管理总结(ASP.net)

ASP.NET 状态管理(总结)---转自:aierong原创技术随笔(http://www.cnblogs.com/aierong/archive/2008/12/10/1351601.html)...
  • Billcat
  • Billcat
  • 2010年06月18日 17:00
  • 424

ASP.NET 状态管理

每次将网页发送到服务器时,都会创建网页类的一个新实例。在传统的 Web 编程中,这通常意味着在每一次往返行程中,与该页及该页上的控件相关联的所有信息都会丢失。例如,如果用户将信息输入到文本框,该信息将...
  • xlinnote
  • xlinnote
  • 2011年08月08日 13:21
  • 15

ASP.NET状态管理大集合

 
  • qinchende
  • qinchende
  • 2007年10月15日 00:05
  • 362

Asp.net状态管理(六)

 6  隐藏域/ViewState/ControlState——保存数据的另一个场所6.1  使用隐藏域Session、Application和Cache都是保存在服务器内存中的。一般来说我们是无权访...
  • ojekleen
  • ojekleen
  • 2007年10月23日 13:54
  • 746

ASP.NET状态管理

同样,听了微软讲师邵志东的讲座“ASP.NET状态管理”的视频讲座,总结如下,希望得到大家的指点:第一部分:页面状态介绍Http协议————“无状态协议”Web服务器每分钟对上千个用户进行管理的一种方...
  • vipxiaotian
  • vipxiaotian
  • 2007年12月08日 13:47
  • 689

ASP.NET 状态管理(Application)

应用程序状态允许保存被所有客户访问的全局对象。应用程序状态基于 System.Web.HttpApplicationState 类,该类在 Web 页面中通过内建的 Application 对象提供。...
  • my98800
  • my98800
  • 2016年05月01日 14:54
  • 121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Asp.net常用状态管理方案分析
举报原因:
原因补充:

(最多只允许输入30个字)