Viewstate超时错误

时间:2014-01-08 17:59:17

标签: asp.net viewstate

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

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

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

Here微软称这个问题的一个解决方案是:

 <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?如果有,怎么样?

谢谢

1 个答案:

答案 0 :(得分:0)

使用计算机密钥对viewstate进行加密,以确保在回发期间不会对其进行篡改。用于加密视图状态的机器密钥默认是自动生成的,如果发生超时,则密钥的解密将失败,因为机器密钥将重新生成。

默认情况下,machinekey在机器级配置文件中可用。

<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>