网站中的Viewstate验证失败 - 通常的嫌疑人被淘汰

时间:2013-04-08 18:36:49

标签: asp.net viewstate machinekey

我认为我已经尝试过对这个问题的所有标准回答,而且我知道我已经阅读了数百个关于这个问题的问题和帖子,但是他们似乎都没有解决它或者说明任何问题。我的情景中的原因是什么。 (我5个小时下来,不再接近:-()

  • 我有一个包含2台服务器的网络农场。

  • 我在两台机器上的machine.config中设置了机器密钥和验证密钥

  • 加密:SHA1,解密:AES - 这些是默认值,是否有助于更改它们?

  • 我已经确认链中没有其他配置文件(web.cfg,apphost等)具有这些值的设置。

  • 我已经向网站添加了一个页面(based on this SO),该页面将机器密钥值退出,并验证它们对两台机器的请求是否相同,并匹配机器中的值的.config

  • 服务器端会话状态位于共享状态服务器中,我已验证sessionid在对2台服务器的请求之间保持不变。

  • 我已经验证页面已完全加载,并且在启动帖子之前已将__EVENTVALIDATION隐藏字段呈现到页面中。在7.64kb

  • ,viewstate大小也不算太差

当页面从请求呈现到服务器1然后发回服务器2时,我会感到害怕......

Error Message:

Unable to validate data.
at System.Web.Configuration.MachineKeySection.GetDecodedData(Byte[] buf, Byte[] modifier,   Int32 start, Int32 length, Int32& dataLength)
at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString)   HttpApplication.RecordError => HttpApplication.RaiseOnError => global_asax.Application_Error

该帖子由标准的,纯粹的asp链接按钮触发,页面上没有ajax。

非常感谢任何和所有帮助。

设置enableViewStateMAC = false不是解决方案: - )

3 个答案:

答案 0 :(得分:2)

在配置状态下继承了服务器,我从不质疑密钥的有效性! ...刚检查两台服务器上是否匹配......

保留所有加密/解密和验证算法设置,我使用 this tool 生成了新密钥,其中包含的选项比其他选项多一些。

问题解决了

故事的道德:如果有疑问,请生成新密钥

......但是为什么以及如何?使用viewstate的一些回发与旧密钥一起正常工作,只有当回发到另一台服务器时问题变得明显。如果密钥无效 - 缺少某个字符或其他内容 - 那么每个回发都应该失败 - 我认为

答案 1 :(得分:1)

如果您已确定两个机器上的机器密钥相同,那么它的加密/解密是否可以?

您是否尝试过使用Triple DES并在两台服务器上的machine.config中设置decryptionKey?

Check here

答案 2 :(得分:1)

另外一种确保machineKeys相同的简单方法是在web.config中添加这样的一行。

注意:假设您在两台服务器上都有相同的web.config并确保validationKey和decryptionKey有效

您可以使用http://aspnetresources.com/tools/machineKey生成它。

<system.web>
  <machineKey validationKey="*D9B0EDEA69D81A89BF5FBA2B08BAF691013F86B89A1F6BA8068C6ECC9539074" decryptionKey="*AE2B1966AF65D08F03EDFB" validation="SHA1" decryption="AES" />
相关问题