【发布时间】: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";