session 与 ViewState 的区别
session 是存在服务器端,大量的使用session将导致服务器负担加重.而viewstate由于只是将数据存入到页面隐藏控件里,不再占用服务器资源,因此, 我们可以将一些需要服务器"记住"的变量和对象保存到viewstate里面.
而sesson则只应该应用在需要跨页面且与每个访问用户相关的变量和对象存储上. 另外session在默认情况下20分钟就过期,而viewstate则永远不会过期.
任何事物都有两面性, 使用viewstate会增加页面html的输出量,占用更多的带宽,这一点是需要我们慎重考虑的. 另外, 由于所有的viewstate都是存储在一个隐藏域里面,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值.
其实,对于viewstate的安全性问题,asp.net还给我们提供了更多的选择.
一般如果要保护viewstate有两种方式: 一种是防篡改,一种是加密. 一说到防篡改,我们就想起了使用散列代码.
没错, 我们可以在页面顶部加入如下代码:
Page EnableViewStateMAC=true