背景:
web.config
web.config
使用<sessionState timeout="200" />
new FormsAuthenticationTicket(2, ticket.Name, DateTime.Now, DateTime.Now.AddMinutes(200), false, ticket.UserData);
当用户在同一页面停留19-20分钟时,然后进行回发,viewstate似乎丢失(ViewState[xxx]
中存储的数据为空)。
我认为viewstate不会丢失,因为它会在每次回发时发送回服务器?
答案 0 :(得分:3)
我的猜测是,这是IIS和ASP.NET中的设置组合。
因此,您在IIS中启用了应用程序池在空闲超时时的回收,这基本上意味着如果在20分钟内没有请求,则应用程序池将停止。
我还想到你将MAchineKey设置为Auto,这意味着每次AppPool启动它都会生成一个新密钥,这可能意味着,因为你的ViewState可能正在使用加密,然后在20分钟后它无法解密,因为密钥根据应用程序池回收而更改。
您应该查看事件查看器,看看是否有关于WAS回收应用程序池的消息以及无效的视图状态错误。 在IIS中,转到“应用程序池”页面并单击“高级设置”,您可以看到默认实际上是20分钟的空闲超时时间。
答案 1 :(得分:-1)
您是否启用了ASP状态服务器?可能在web.config中。 检查超时。