MCTS 70-515培训套件,视图状态错误?

时间:2011-10-01 08:47:19

标签: asp.net web

在本书的第123页 - 第3章,第2课。它说: “ Page.ViewState属性提供了一个字典对象,用于保留其间的值 对同一页面的多个请求。此对象的类型为StateBag。当一个ASP.NET 处理页面,页面的当前状态及其控件被散列成一个字符串和 在页面中保存为名为__ViewState的HTML隐藏字段。如果数据太长了 ASP.NET执行单个字段(在Page.MaxPageStateFieldLength属性中指定) 查看状态块以将其分割为多个隐藏字段。“

我对__ViewState隐藏字段的理解是,它存储了与设计时相比更改的控件值。更不用说如果__ViewState是任何数据量的散列,它将永远不会变得太大,因为散列的大小是固定的。

这本书错了吗?或者我在这里错过了一些东西......

2 个答案:

答案 0 :(得分:1)

Viewstate使用base-64编码。

本书具有误导性,因为散列是单向操作,以后很难在服务器端对其进行解码。

您的理解也是错误的,viewstate不存储与设计时值不同的值。基本上,它是在回发之间保持表单数据。有关详细信息,请参阅msdn(http://msdn.microsoft.com/en-us/library/bb386448.aspx)。

答案 1 :(得分:1)

我也在使用同一本书学习这门考试。该特定行似乎与以下文章中的信息相似

  

http://msdn.microsoft.com/en-us/library/ie/75x4ha6s.aspx

     

处理页面时,页面和控件的当前状态   被散列成一个字符串并作为隐藏字段保存在页面中,或   如果存储在ViewState中的数据量,则隐藏多个字段   属性超过MaxPageStateFieldLength中的指定值   属性。当页面回发到服务器时,页面将解析   页面初始化和恢复属性时的视图状态字符串   页面中的信息。

但是,如果你在MSDN的其他地方挖掘,可以得到以下解释,这是准确的。

  

http://msdn.microsoft.com/en-us/library/ie/bb386448.aspx

     

默认情况下,视图状态数据存储在页面中的隐藏字段中   并使用base64编码进行编码。另外,视图的哈希   通过使用机器身份验证从数据创建状态数据   代码(MAC)密钥。散列值被添加到编码的视图状态数据   并且结果字符串存储在页面中。当页面是   发回服务器,ASP.NET页面框架重新计算   哈希值并将其与视图状态中存储的值进行比较。如果   哈希值不匹配,引发异常表示   查看状态数据可能无效。

     

通过创建哈希值,ASP.NET页面框架可以测试是否   视图状态数据已损坏或被篡改。但是,甚至   如果没有被篡改,视图状态数据仍然可以被截获   并被恶意用户阅读。

所以,回答你的问题。

  • 哈希已经完成,但仅用于有效目的。该段肯定会产生误导。
  • 关于__ViewState,Dooh提供了上面的链接