1

背景:

  • aspnet C# 3.5 网络应用程序
  • iis 7
  • 机器密钥设置在web.config
  • 会话到期:web.config使用200 分钟<sessionState timeout="200" />
  • 票是这样设置的:
new FormsAuthenticationTicket(2, ticket.Name, 
                              DateTime.Now,
                              DateTime.Now.AddMinutes(200), 
                              false, ticket.UserData);

当用户在同一页面上停留 19-20 分钟,然后进行回发时,视图状态似乎丢失了(存储的数据ViewState[xxx]为空)。

我认为视图状态不会丢失,因为它会在每次回发时发送回服务器?

4

2 回答 2

3

我的猜测是这是您在 IIS 和 ASP.NET 中的设置的组合。

因此,您在 IIS 中启用了空闲超时时的应用程序池回收,这基本上意味着如果在 20 分钟内没有请求,则应用程序池将停止。

我还想象的是,您将 MAchineKey 设置为 Auto,这意味着每次 AppPool 启动时它都会生成一个新密钥,这可能意味着您的 ViewState 可能正在使用加密,然后在 20 分钟后它无法解密,因为密钥更改基于关于应用程序池回收。

您应该查看事件查看器,看看是否找到有关 WAS 回收应用程序池的消息以及无效的视图状态错误。在 IIS 中进入应用程序池页面并单击高级设置,您可以看到默认设置实际上是 20 分钟空闲超时。

在这里您可以看到默认值为 20 分钟

于 2013-10-07T16:39:29.760 回答
-1

您是否启用了 ASP 状态服务器?可能在 web.config 中。检查超时。

于 2018-05-31T08:01:34.950 回答