状态管理之一(概览)
Web服务器每分钟对上千个用户进行管理的一种方式就是执行所谓的“无状态”连接。只要有一个浏览器希望返回一个页面、图像或其他资源的请求,就会发生以下事情:
1、连接到服务器
2、告诉服务器想要的页面、图像或者其他项
3、服务器发送请求的资源
4、服务器切断连接把用户忘得干干净净
这样来说,Web 显然是断续的,而在我们真实的开发过程中,很多状态往往需要被保留的,例如,如果用户将信息输入到文本框,该信息在从浏览器或客户端设备到服务器的往返行程中我们可能希望被一直保留着。Asp.net中提供了很多保存状态的机制,下面我们来分析分析这些机制。
|
允许存放的数据类型 |
存储位置 |
生命周期 |
范围 |
安全性 |
性能 |
典型使用场景 |
视图状态 |
所有可序列化的数据类型 |
当前页的隐藏域中(input hidden) |
持久化于当前页面的postback过程中,会随着当前页的消失而消失 |
仅限当前页 |
比隐藏域安全性要好,但它可以被篡改。如果直接查看页输出源,可以看到隐藏域中的信息,这导致潜在的安全性问题 |
因为数据一直保留在往返的页面中,如果存储大量信息会增大传输时间。 |
单页状态管理时 |
控件状态 |
与视图状态相同 |
与视图状态相同 |
与视图状态相同 |
与视图状态相同 |
与视图状态相同 |
与视图状态相同 |
一些视图状态被禁,仍然需要被保存的重要的控件状态 |
查询字符串 |
有限数量的字符串 |
浏览器地址栏中 |
当输入新地址或关闭浏览器时消失,它可以用于存储两个访问的状态 |
限目标页 |
因为是保存在浏览器的地址栏中,所以非常容易被篡改。 |
因为只存储少量数据,基本没什么性能问题 |
存储在页间的少量非敏感信息,比如分类id的页间传递。 |
Cookie |
字符串 |
客户端的计算机中 |
根据具体设置可以用于多页面的持久化。 |
整个Asp.net应用程序 |
可以被用户篡改 |
因为只存储少量数据,基本没什么性能问题 |
网站的一些个性化信息。 |
隐藏域 |
字符串 |
客户端页面中 |
存储于post页面中,可以传递页间信息 |
存在于当前页中,在目标页中读取 |
可以被用户篡改 |
因为存储于页面中,不应该存储大量数据。 |
Asp.net中很少直接使用。 |
应用程序状态 |
所有.net类型 |
服务器端内存 |
服务器不重启动则一直有效 |
整个Asp.net应用程序 |
因为是存储在服务端,所以不易被篡改,比较安全 |
占用服务器资源,存储大量数据可能使服务器变慢,而且服务器不重新启动则一直占用资源。 |
整个Asp.net应用程序的全局数据 |
会话状态 |
所有可序列化的数据类型 |
服务器内存或数据库中 |
根据服务器配置的时间而定(默认为20分钟) |
整个Asp.net应用程序 |
因为是存储在服务端,所以不易被篡改,比较安全 |
占用服务器资源,存储大量数据可能使服务器变慢 |
比如用户登陆信息等 |
配置文件属性 |
所有可序列化的数据类型 |
数据库中 |
一直有效 |
整个Asp.net应用程序 |
相当安全 |
比较适合存储大数据量,但需要考虑数据库性能 |
用户的一些自定义信息 |
缓存 |
所有.net类型 |
服务器内存 |
依赖于设置的缓存策略 |
整个Asp.net应用程序 |
相当安全 |
占用服务器资源,存储大量数据可能使服务器变慢 |
为了不用再次访问数据库而存储的一些常用信息。 |
作者:Lance
出处:http://www.cnblogs.com/nuaalfm/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。