浅谈ViewState

来源:互联网 发布:迅雷赚钱宝pro 知乎 编辑:程序博客网 时间:2024/05/17 04:13


      ViewState相当于页面的一个隐藏文本框控件,所有ViewState都是存储在一个隐藏域,不因为页面的刷新而数据丢失,数据是保存在页面里的,这样可以减少服务器的负担(session保存的数据则是储存在服务器的内存中的,可以跨页面传递,但会增加服务器的负担),可以总结说,ViewState是属于客户端,session属于服务器端。当然你可能说在页面的数据不是可以通过查看源文件而得知, 是的,用户可以很容易的通过查看源码来看到这个经过base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值.base64编码的值.然后再经过转换就可以获取你存储其中的对象和变量值。所以对于ViewState的安全性问题,asp.net还给我们提供了更多的选择.一般如果要保护ViewState有两种方式: 一种是防篡改,一种是加密.对于防篡改, 我们可以在页面顶部加入如下代码:Page EnableViewStateMAC=true,这样asp.net就会自动的在ViewState中追加一个散列码,在页面回传时,服务器根据回传的ViewState生成一个散列码,再与回传的散列码相比较,如果不对,则丢弃该ViewState,同时控件将恢复初试状态. (默认情况下asp.net是通过SHA1算法而不是md5算法来生成散列,不过这个可以在machine.config里面配置machineKey validation="MD5"即可);对于ViewState加密就更简单了, 只要在machine.config里设置一下machineKey validation="3DES"即可实现用des加密ViewState了。
      对于类型支持方面,ViesState 并不是能存储所有的.net类型数据,它仅仅支持String、Integer、Boolean、Array、ArrayList、Hashtable 以及自定义的一些类型。
      在储存页面数据的时候,ViewState永远不会过期,而对于session, 在默认情况下20分钟就过期,它主要使用于储存一些与安全性无关,数据量较少,需要长时间操作的参数,例如在webgis中,保存地图的状态,甚至可以下载保存。

 

原创粉丝点击