今天在帮朋友解决错误:
System.Web.HttpException: Authentication of viewstate failed.
1) If this is a cluster, edit <machineKey> configuration so all servers use the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.
2) Viewstate can only be posted back to the same page.
3) The viewstate for this page might be corrupted. ---> System.Web.HttpException: 无法验证数据
google出来的转过来参考下
[转自百度舞月光]
分析以上异常报告,引发此异常一定是因为1)了,所以有以下解决方案:
1.负载均衡Pool的Persistence Type(进程延续)的值改为Simple,Timeout设为600秒。
2.将每台服务器上的machine.config 中以下配置的machineKey 改为一致的配置
<!-- validation="[SHA1|MD5|3DES]" -->
<machineKey validation="SHA1" validationKey="F3690E7A3143C185A6A8B4D81FD55DD7A69EEAA3B32A6AE813ECEEC" />
<machineKey validation="SHA1" validationKey="F3690E7A3143C185A6A8B4D81FD55DD7A69EEAA3B32A6AE813ECEEC" />
3.在特定的页面上disable the keying of viewstate to a particular server
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="MyPage.aspx.cs"
Inherits="MyAssembly.MyPage" enableViewStateMac="False" %>
Inherits="MyAssembly.MyPage" enableViewStateMac="False" %>
4.在Web.config里加以下配置来实现每个页面都禁用enableViewStateMac
<system.web>
<pages enableViewStateMac="false" />
</system.web>
<pages enableViewStateMac="false" />
</system.web>
建议:
在实际解决的时候,第一个方式需要动系统设置,如果不了解服务器各个方面的安全配置情况建议不采用,而第3和第4个方式,除非你的用户是经过身份验证过的,而且查询的东西不是敏感数据,那么问题不大,否则应该时候第2个方案!因为这样更安全,微软既然设计了ViewState加密自然有他的道理,所以不要轻易禁用它!