在该书的第123页-第三章,第二课。它说:“Page.ViewState属性提供了一个字典对象,用于在同一页面的多个请求之间保留值。该对象的类型为StateBag。当处理ASP.NET页面时,页面及其控件的当前状态将被散列为一个字符串,并作为名为__ViewState的HTML隐藏字段保存在页面中。如果数据对于单个字段(如Page.MaxPageStateFieldLength属性中所指定的)太长,ASP.NET将执行视图状态分块以将其拆分到多个隐藏字段中。”
我对__ViewState隐藏字段的理解是,与设计时相比,它存储了更改的控件的值。更不用说,如果__ViewState是任何数量的数据的散列,它永远不会变得太大,因为散列的大小是固定的。
这本书是错的吗?还是我错过了什么..。
发布于 2011-10-01 22:26:49
Viewstate使用base-64编码。
Book是误导性的,因为散列是单向操作,它会使稍后在服务器端解码它变得非常不可能。
您的理解也是错误的,视图状态不存储与设计时值不同的值。基本上,它在回发之间持久化表单数据。详情请参考msdn (http://msdn.microsoft.com/en-us/library/bb386448.aspx)。
发布于 2012-01-30 13:26:08
我也在用同一本书为这次考试做准备。这一行似乎与下面文章中的信息类似
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页框架可以测试视图状态数据是否已损坏或被篡改。但是,即使视图状态数据未被篡改,恶意用户仍然可以截获和读取这些数据。
所以,来回答你的问题。
的链接
https://stackoverflow.com/questions/7619199
复制相似问题