Asp.net常用状态管理方案分析
2007-09-29 14:48
316 查看
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来存储数据,那么数据的大小不能超过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的值:
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
优点:
简单方便,应用非常广泛
缺点:
极不安全,非常有必要借助于URLEncode和URLDecode对字符串进行处理以增强安全。
大小受到限制,一些浏览器或客户端设备只支持长度为2083的URL字符串。
ApplicationState
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将数据存储在数据库中,因此存在以下特点,
需要人工维护数据,
性能略差
视图状态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来存储数据,那么数据的大小不能超过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的值:
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
优点:
简单方便,应用非常广泛
缺点:
极不安全,非常有必要借助于URLEncode和URLDecode对字符串进行处理以增强安全。
大小受到限制,一些浏览器或客户端设备只支持长度为2083的URL字符串。
ApplicationState
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常用状态管理方案分析
- Asp.net常用状态管理方案分析
- 【分析总结】ASP.NET中的状态管理原理
- asp.net 状态管理方案总结
- ASP.NET中的加密与解密 【分析总结】ASP.NET中的状态管理原理
- Asp.net状态管理
- ASP.NET创建Web服务管理Web服务状态
- ASP.NET - 状态管理建议
- asp.net 的状态管理
- ASP.NET状态管理之一(概括篇)
- ASP.NET状态管理之六(缓存Cache)
- ASP.NET学习笔记 ---系统对象与状态管理
- ASP.NET状态管理之三(隐藏域HiddenField)
- ASP.NET状态管理的总结
- ASP.NET状态管理之十(配置文件Profile)
- ASP.NET 的状态管理
- asp.net状态管理对象用法和区别
- [导入]ASP.NET 状态服务 及 丢失问题解决方案总结
- ASP.NET 状态管理总结(ASP.net)
- 使用Sql Server管理asp.net的web application会话状态