使用视图状态时,对象必须先序列化,然后再通过回传进行反序列化。
以下情况将不再需要ViewState:
(1)控件未定义服务器端事件(这时的控件事件均为客户端事件且不参加回送的);
(2)控件没有动态的或数据绑定的属性值。
.NET框架为ViewState提供了两种安全机制:
校验机制:设置EnableViewStateMAC=”true”属性来指示.NET框架向ViewState数据中追加一个散列码(该散列码是一种SHA1类型,长度有160位,因此会严重影响执行性能)。在回传事件发生时,将重新建立该散列码,他必须和最初的散列码匹配。通过这种方式,能够有效检验ViewState是否在传送过程中能够被篡改。默认情况下,.NET框架使用SHA1算法来生成ViewState散列代码。此外,也能通过在machine.config文件中设置<machineKey>来选择 MD5 算法,如下所示:<machineKey validation=”MD5″ />。MD5算法的性能要比SHA1算法好一些,不过同样不够安全。
加密机制:使用加密来保护ViewState字段中的实际数据值。首先,必须如上所述设置EnableViewStatMAC=”true”。然后,将machineKey validation类型设置为3DES,即<machineKey validationKey=”AutoGenerate” decryptionKey=”AutoGenerate” validation=”3DES” />,这指示ASP.NET使用3DES加密算法来加密ViewState值。