【问题标题】:Viewstate timeout errorViewstate 超时错误
【发布时间】:2014-01-08 17:59:17
【问题描述】:

我主要为桌面开发,所以我倾向于将 WebForms 视为 WinForms 的 Web 等价物。不幸的是,这不是真的。

最近我发现 Viewstate 有某种超时。

我的问题与我在大多数问题中读到的类似,特别是here(在我的情况下只有大约 5 到 10 分钟)。

HereMicrosoft 表示解决此问题的一种方法是:

 <asp:Page EnableViewStateMac="False" />

然而,我们可以进一步阅读,他们说:

Security Note:
This attribute should never be set to false in a production Web site, 
even if the application or page does not use view state. 
The view state MAC helps ensure the security of other ASP.NET functions 
in addition to view state.

出于这个原因,我不想将 EnableViewStateMac 设置为 false,并且我无法访问我的服务器(共享主机)。

我的问题是:即使我们的页面长时间处于空闲状态,我们是否可以在回发之间存储 Viewstate?如果是,如何?

谢谢

【问题讨论】:

  • 你能展示你用来在 ViewState 中存储对象的代码吗?
  • @rene:我不存储 ViewState。我什至不知道这是否可能。所以,我的问题的原因。
  • @user3174393 您能否详细说明您遇到的实际错误?
  • @geedubb:“/”应用程序中的服务器错误。视图状态 MAC 验证失败。如果此应用程序由 Web Farm 或集群托管,请确保 配置指定相同的验证密钥和验证算法。 AutoGenerate 不能在集群中使用。堆栈跟踪:[ViewStateException:无效的视图状态。
  • 您有会话超时而不是视图状态超时。你可能会做类似Session["mykey"] = "keyvalue"; 的事情。 Viewstate 被发送到浏览器,并且可以在表单的下一次回发时检索。它的典型用法是ViewState["key"] = "value";

标签: asp.net viewstate


【解决方案1】:

视图状态使用机器密钥加密,以确保在回发期间不被篡改。默认情况下,用于加密视图状态的机器密钥是自动生成的,如果发生超时,则密钥的解密将失败,因为机器密钥将被重新生成。

机器密钥默认在机器级配置文件中可用。

<machineKey validationKey="AutoGenerate,IsolateApps"  
            decryptionKey="AutoGenerate,IsolateApps" 
            validation="SHA1" decryption="Auto" />

要解决此问题,您可以使用自己定义的机器密钥。您也可以使用在线工具生成,例如 this 或通过 IIS。

如何将此机器密钥添加到 web.config 可以在 MSDN 阅读。

它应该放在system.web 部分下,像这样-

<configuration>
  <system.web>
    <machineKey decryptionKey="Decryption key goes here,IsolateApps" 
                validationKey="Validation key goes here,IsolateApps" />
  </system.web>
</configuration>

【讨论】:

  • 据我所知,生成机器密钥的工具在网络服务器上运行,对吧?如果是这种情况,我可以这样做,因为我无法访问服务器。这是一个共享主机。
  • 您提供的 MSDN 链接显示:“已停用的内容”
  • 是的,内容被标记为已停用,但它仍然有效并且很好地解释了机器密钥的概念。您需要在 web.config 中添加 machinekey 值
猜你喜欢
  • 1970-01-01
  • 2010-12-08
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-15
  • 2010-12-14
相关资源
最近更新 更多