我有一个ASP.net网站,在本地服务器上正常运行,但当它在外部访问时,会出现一些会导致错误的会话数据问题。第一个问题是与IE9有关的问题。会话变量在达到第二页并且点击存储过程后就无法持久化。我通过强制页面在IE7模式下运行来解决这个问题。
这在某些浏览器上仍然发生(特别是在Firefox中发生一次),但当会话变量为空时,我创建了一个循环将其强制返回菜单页面,因此它看起来像页面没有加载,可以再次按“打开”按钮。
然而,新的问题出现在我尝试在表单上保存数据时。它传递一些会话变量到存储过程接口中(如员工ID等),似乎会超时。然而,webconfig和IIS中设置的所有会话超时时间都非常长(数小时),工作进程被设置为永远不过期或不回收。而且,即使过了一两分钟,它也会发生,所以不能是超时时间的问题。就像它随机失去会话值一样。奇怪的是,如果你回去再次保存-使用相同的数据执行相同的操作-它往往会起作用。有时需要进行几次迭代,但最终它会起作用。
奇怪的是,它倾向于随机丢失ViewState的一些部分-例如字段值-但这可能与自动加载的字段有关,而不是无关的。但我想在这种情况下包括它,以便了解为什么可能会出现这种情况。
我正在考虑一个解决方法,即在页面加载后立即将会话变量转储到ViewState变量中,但我真的想直接解决问题,这样当我不能像那样处理时,我将来就不必再处理它。 IIS(顺便说一句,它是IIS 6)可能是罪魁祸首吗?会话变量只是因为被频繁传输而死亡?我不能说我对服务器设置非常了解,但我从这种情况中学到了很多,并且战胜它将是我士气的巨大胜利。谢谢你阅读并且抱歉太长了!