浅谈ViewState


      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中,保存地图的状态,甚至可以下载保存。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值