Cache的关键特性有:存储于服务器内存中,与会话无关,根据服务器内存资源的状况随时可能被丢弃,不被序列化,不发生服务器-客户端数据传输。
在这里,我还希望对ViewState也顺便做一个描述,以便与上面四种数据持久化的方式做一个对比。因为,ViewState虽然不能够跨页面共享数据,但是在同一个页面里,可以用于在对同一页的多个请求之间保留值。
五、ViewState
ViewState 属性提供一个字典对象,用于在对同一页的多个请求之间保留值。这是页用来在往返行程之间保留页和控件属性值的默认方法。在处理页时,页和控件的当前状态会散列为一个字符串,并在页中保存为一个隐藏域或多个隐藏域(如果存储在 ViewState 属性中的数据量超过了 MaxPageStateFieldLength 属性中的指定值)。当将页回发到服务器时,页会在页初始化阶段分析视图状态字符串,并还原页中的属性信息。也可以使用视图状态来存储值。在默认情况下,ViewState不被加密,并且发生服务器-客户端数据传输。
ViewState的关键特性有:存储于页面上,与会话且与页面相关,被序列化,默认发生服务器-客户端传输,默认不被加密。
至于在什么样的情况下ViewState不发生服务器端-客户端传输,或者被加密,我们将在后面的章节中予以讲述。
综上,我们总结出一些常见而典型的例子:
电子商务网站的购物车:使用Session,因为购物车信息是会话相关的而且安全性很重要。
论坛或其它网站的“记住我”功能:使用Cookie,因为这是保存的往往只是一个用户名,而且当用户下次登陆时还需要这个用户名仍然存在。
站点计数器:如果您不用数据库的话那就是使用Application了,因为计数器是会话无关的。但是即使在使用数据库的情况下我也建议你同时使用Application来保存计数值,然后再每隔一段时间保存到数据库里去,因为这样可以减少访问数据库的次数以提高性能。
产品信息:Cache是优先的选择,因为产品信息通常是与会话无关、修改频率低且访问频率高的数据,使用Cache来保存可以有效地提高网站的性能。
最后,我们给出一个表格,列出以上几种数据持久化方式的特性对比,以便您做出决定:
| Application | Cache | Session | Cookie | ViewState | |
| 存储位置 | 服务器 | 服务器 | 服务器 | 客户端 | 客户端 |
| 是否会被主动丢弃 | 不会 | 会 | 不会 | 不会 | 不会 |
| 与会话相关 | 否 | 否 | 是 | 是 | 是 |
| 是否被序列化 | 否 | 否 | 否 | 是 | 是 |
| 是否发生服务器-客户端传输 | 否 | 否 | 否 | 是 | 是(默认情况) |
| 是否被加密 | 否 | 否 | 否 | 是 | 否(默认情况) |








