ASP.NET状态管理策略

如果要想把信息存储在客户端那可以选择视图状态、控件状态、隐藏字段、cookie、和查询字符串。

1、web窗体页提供viewstate属性作为内置结构,在同一页的多个请求间自动保留值。他作为页面的隐藏域来进行维护。一般是加密的哦。

视图状态保存在也代码结构中,不需要任何服务器资源;实现简单,视图状态不需要用户自己编程。默认情况下对控件启用状态数据维护;视图状态的值经过哈希计算和压缩,并且对unicode实现精心编码,安全性高于隐藏域。

视图状态存储在页本身,数据较多时可能会分块,因此如果存储较大的值显示页的速度可能会受到影响。移动设备可能没有祖国的内存来存储大量的视图数据。在安全性上,隐藏域的值会被一些工具解析出来,导致篡改泄密等隐患。

2、ASP.NET页框架提供了controlstate属性作为服务器往返过程中保存控件的值。控件据此知道在往返过程中的状态。视图状态可用与此,但是开发人员可以在页级将视图关闭,这实际上破坏了您的控件。而控件状态不能被关闭,因此他提供了存储控件状态的可靠方法。

默认情况下,控件 的状态存储在也的额隐藏域中,不需要任何服务器资源。因为控件状态不能被关闭所以比视图状态更可靠。控件状态是自定义的状态保存机制,开发人员可以编写代码来控制如何保存。

3、隐藏字段。他是标准的html控件,使用隐藏字段存储特定于页的信息,必须使用post方法与服务器进行交互。

隐藏域在页上存储和读取,不需要服务器资源,几乎被所有浏览器广泛支持。但是安全性不能被忽视,你可以添加代码进行加密,大着需要额外开销。隐藏域不支持复杂数据类型,只提供字符串形式的存储,当然你可以把要存储的复杂数据序列化,以及反序列化。同样由于存储在也本身,会对页面加载造成影响。

如果存储量太大,某些代理或防火墙将阻止包含大数据页面的访问,这时可以考虑将俄米格项放在单独的隐藏域中;或者使用视图状态并打开分块模式,这样会自动将数据分割到多个隐藏域中。

4、cookie用于向客户端存储少量的经常更改的信息,这些信息会和特定站点关联的URL请求一起放松到服务器。cookie可以在浏览器或服务器设置到期规则,用户、浏览器起决定作用。cookie存储在客户端并在发送后有服务器读取,他是一轻量级的键值对结构。

cookie大小受浏览器限制,(通常可以把cookie设置为子键型)而且有些用户禁止接受cookie,因此限制了此功能。同样cookie存在安全隐患,用户可以操纵cookie,这意味着一些依赖于cookie的应用程序的失败。当然你可以用额外的代码进行加密。cookie通常用于为已知用户自定义内容的个性化情况,大多数情况cookie是标识而不是身份验证。在 Cookie 中存储用户名、帐户名或唯一用户 ID(例如 GUID),然后用以访问站点的用户个性化结构中的信息。

 5、(通过连接或get方法时才能用此方法)查询字符串在URL的结尾附加信息,在页面之间传递数据简单明了。但是加载数据非常有限长度一般最大为2081个字符。用户会在浏览器中直接看到查询字符串的信息,若果有敏感信息建议用post方法

 当然可以在服务器端存储数据,这样有更高的安全性。

1、应用程序状态。ASP.NET通过HttpApplication类将应用程序状态设置为一种存储全局程序特定的信息的方法。应用程序状态变量实际上是ASP.NET应用程序的全局变量。你可以在应用程序状态中存储应用程序特定的值,应用程序状态有服务器来管理。由多个会话共享并且不经常更改的数据是插入到应用程序状态变量的理想数据,如果将常用的、相关的静态数据集放置到应用程序状态中,则可以通过减少对数据库的数据请求总数来提高站点性能。

应用程序状态可供应用程序中的所有页来访问,有多个会话共享并且不经常更改的数据是插入到应用程序状态变量的理想数据。应用程序状态仅对于正在其中运行 的特定进程而言是全局的,并且每一应用程序进程可能具有不同的值。因此,不能依赖他存储唯一值或web场或web园服务器配置中 的全局计数器。(Web园(Web Garden),是IIS 6.0应用程序池的一种配置方案。要理解Web园的概念,可以设想这样一种情形:假设有一个IIS 5.0服务器和三个Web网站,每一个Web网站运行着相同的应用程序,如果IIS 5.0能够自动按照圆形循环的模式将请求依次发送给这些功能上等价、实际上分离的Web网站,将负载分离到三个不同的进程,就可以构成一个小型的Web农场(Web Farm)——这就是Web园。而在IIS 6.0的Web园中,我们不必创建额外的Web网站,只要指定用于某个应用程序池的工作进程的数量就可以了。)

应用程序状态药服务器内存,这会影响服务器性能,而且若果包含这些数据的服务器进程被损坏(因服务器升级。崩溃或关闭)这些数据会丢失。

2、会话状态。ASP.NET提供一种会话状态,将一个有限时间窗口内来自同一 浏览器的请求表示为一个会话,并在该会话持续期间保留变量的值。可以在会话状态中存储会话特定的值和对象,该会话状态对象将由服务器来进行管理并可用于浏览器或客户端设备。存储在会话状态变量中的理想数据是特定于单独会话的短期的、敏感的数据。会话管理事件可以由应用程序引发和使用,sessionstart等。会话状态可以在多计算机和进程配置实用。尽管会话状态最长见得用途是与cookie一起向web应用程序提供标识功能,但是会话状态可用于不支持httpcookie的浏览器。这时会话状态标识符要放在查询字符串中。

其他方法还可以通过配置文件和的数据库来维护信息。

 

 

 

你可能感兴趣的:(asp.net)