我目前遇到一个间歇性问题,用户在这篇文章的标题中收到错误消息:
System.Web.UI.ViewStateException 无效的视图状态。客户端IP:127.0.0.1 端口:xxxReferer:xxx
我终于设法在我们的开发环境中复制了这个,它似乎与在 20 分钟不活动后发回表单有关。
我最初认为是会话超时导致了问题,但显然不是。
我找到了以下帖子:
这表明 ViewState 加密密钥具有有限的生命周期,默认情况下在服务器级别设置为:
<machineKey validationKey="AutoGenerate,IsolateApps"
decryptionKey="AutoGenerate,IsolateApps"
validation="SHA1" decryption="Auto" />
奇怪的是,这不会同时发生在所有用户身上,所以这不是应用程序池回收。
有谁知道每个用户会话是否生成一个密钥?
我已经设法修复了这个错误,我按照建议添加了一个静态机器密钥配置
<machineKey validationKey="9664D19D67A5EE43FE77CD2B660A57DF254B15714935DDDDAAC94BC66C5C398F894380AD56572C8762A1AB116B9070C7ACC7F32B489D23476CEA909448831AF3"
decryptionKey="CAD9BBC02543433C50CD4A11EA706F0F25FCD51F28E9DEAF20361F0AA2AB3793"
validation="SHA1"
decryption="AES"
/>
在生产环境中这样做安全吗?想要仔细检查,因为该应用程序已经运行了大约 10 年,这是一个全球性的变化,我不愿意在不知道利弊的情况下进行。
提前致谢。