详解ASP.NET常用状态管理

开发 后端
本文介绍ASP.NET常用状态管理,包括视图状态View state、隐藏域 Hidden Fields、Cookies、Query string和Application state等。

ASP.NET常用状态管理方案有:
◆视图状态View state
◆隐藏域 Hidden Fields
◆Cookies
◆Query string
◆Application state
◆Session state
◆Profile

ASP.NET常用状态管理其中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的值是以隐藏域的形式通过哈希的方法存储在页面中,形同:

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

如果使用View state来存储数据,那么数据的大小不能超过page的MaxPageStateFieldLength定义的值.
◆优点:无需服务器端资源,由于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数也有限制,一般地,允许每个站点最多可以产生20个Cookies。

读取Cookies的值:

  1. if (Request.Cookies["UserSettings"] != null)  
  2. {  
  3. string userSettings;  
  4. if (Request.Cookies["UserSettings"]["Font"] != null)  
  5. userSettings = Request.Cookies["UserSettings"]["Font"]; }  
  6. }  
  7. 向Cookies写值:  
  8. Response.Cookies["UserSettings"]["Font"] = "Arial";  
  9. Response.Cookies["UserSettings"]["Color"] = "Blue";  
  10. Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(1d); 

◆优点:可以配置过期时间、无需占用服务器端资源、简单易用、也可以保持持久数据
◆缺点:大小限制,大多数浏览器置支持4M字节。受到用户配置限制,如果浏览器禁用Cookies,那么该项功能就没法使用、潜在的安全隐患。 由于Cookies是以文本文件的形式存放在客户端机器中,虽然Cookies的内容经过哈希,但仍然可以被人获取并利用。

查询字符串

查询字符串就是在页面的URL后面加上一些参数,通过这种形式进行页面之间的值传递。它提供了非常方便的页面传值方式。
◆优点:
简单方便,应用非常广泛
◆缺点:极不安全,非常有必要借助于URLEncode和URLDecode对字符串进行处理以增强安全。大小受到限制,一些浏览器或客户端设备只支持长度为2083的URL字符串。

Application State

Asp.net允许你以Application state的方式存储值--它是HttpApplicationState类的一个实例。Application state提供一个全局的存储方式,可以被web 应用程序的每一个页面获取。Application state和Session State一样,以键值对的形式存储值。
◆优点:全局范围
◆缺点:全局范围、占用服务器资源、脆弱性,由于Application State是存储在内存中,因此当应用程序停止或重启时会丢失。扩展性差,无法在多个服务器或多个处理器之间共享。

Session State

Session State和Application 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开发技巧之Theme功能浅析
  2. 详解ASP.NET动态编译
  3. Apache支持ASP.NET方法浅析
  4. 浅谈ASP.NET服务器标准控件
  5. ASP.NET中SQL Server数据库备份恢复浅析
责任编辑:佚名 来源: MSDN
相关推荐

2009-07-20 14:32:08

2009-08-05 13:50:23

ASP.NET状态管理

2009-04-27 10:33:16

ASP.NET视图状态

2009-07-29 16:08:07

ASP和ASP.NET

2009-07-28 16:57:50

ASP.NET Ses

2009-08-05 11:14:33

ASP.NET ISA

2009-07-24 10:14:22

ASP.NET开发

2009-07-22 16:25:41

ASP.NET AJA

2009-07-23 13:19:51

2009-07-28 11:09:02

ASP.NET状态类型

2009-07-28 16:03:23

ASP.NET状态服务

2009-08-04 13:10:05

ASP.NET服务器控

2009-07-23 13:09:23

2009-07-28 13:39:44

加载ViewStateASP.NET

2009-08-04 10:43:59

ASP.NET控件开发

2009-08-19 13:44:00

ASP.NET Lis

2009-08-04 18:10:35

ASP.NET动态编译

2009-07-24 10:41:00

ASP.NET Ses

2009-07-20 17:21:43

Session状态ASP.NET

2009-07-29 09:53:24

ASP.NET异常管理
点赞
收藏

51CTO技术栈公众号