繁体   English   中英

Asp.net会话数据丢失

[英]Asp.net Session Data Loss

我在之前的一个问题中谈过这个问题,但我已经缩小了问题范围,以便能够得到回答。 首先,一些背景。

我有一个ASP.net网站,它在本地服务器上正常运行,但当它在实时服务器上并在外部访问时,它会有一些会话数据问题,偶尔会抛出错误。 第一个问题是IE9的一个问题。 会话变量在到达第二页并点击存储过程后就不会持久存在。 我通过强制页面在IE7模式下运行来修复此问题 -

这仍然发生在一些浏览器上(特别是它出现-once- with firefox)但我创建了一个循环,当会话变量为空时强制它回到菜单页面,所以它只是在页面没有加载时出现并且“打开” “按钮可以再次按下。

但是,当我尝试在表单上保存数据时,会出现新问题。 它将一些会话变量传递给存储过程接口(如员工ID等),似乎发生的事情是它超时。 但是,在webconfig和IIS中设置的会话的所有超时都是非常高的数字(许多小时),并且工作进程设置为永不过期或回收。 此外,它甚至在一两分钟后发生,因此它不能超时击中。 就像它随机丢失会话值一样。 奇怪的是,如果你回去再次保存 - 用相同的数据执行相同的操作 - 它往往会起作用。 有时它需要几次迭代,但最终它会起作用。

奇怪的是,它往往会随机丢失视图状态的部分 - 例如字段值 - 但这可能是无关的,并且与在加载时自动填充的字段有关。 但是我想我会把它包含在内,以防它提供和提供有关它为什么这样做的信息。

我正在考虑通过在页面加载时将会话变量转储到viewstate变量中来解决这个问题,但我真的想直接解决这个问题,以便将来我无需处理它。做那样的事情。 是否有一些IIS(顺便说一下是IIS 6)可能是罪魁祸首? 会话变量是否因为在被大量抛出时死亡而闻名? 我不能说我对服务器设置了解很多,但我从这种情况中学到了很多东西,并且击败这对我的士气来说将是一个美妙的胜利。 谢谢你的阅读,对不起,这么久!

请检查此服务器是否负载均衡。

无论哪种情况,请查看本文。 http://aspalliance.com/1182_Troubleshooting_Session_Related_Issues_in_ASPNET

希望这可以帮助。

好!

在阅读了你的帖子并思考之后,我认为最有可能导致问题的原因是狡猾的ISA Server 代理往往会弄乱HTTP内容,决定更改标题等。 正如您所提到的,只有在外部访问时才会发生这种情况。 这是中间问题上人的标志。

现在要证明,您必须比较外部发送的标头和您收到的标头。 这有点困难,但根本不可能。 您只需要在服务器端记录所有标头(请求),同时从客户端的计算机上执行相同操作(可能使用fiddler)。

这应该可以证明狡猾的代理 - 我们公司有类似的问题。

好吧,我做了一些事情,它现在正在运行,但我没有测试哪个是实际的解决方案,而且我的理解中最好的一个都不应该实际修复了这个问题。 首先,在某些时候,我将可用的工作进程从一个增加到三个,我认为这意味着允许用户在必要时在服务器上运行多个进程,但事实证明这只是服务器场所必需的。 所以我把它重新设定为一个。 这个问题出现之前就已经出现了,我基本上只是在试图解决它会有什么问题。

我做的第二件事是在一个私有子中添加一个简单的if语句(如果会话变量为空),该私有子包含发送会话变量的存储过程的接口。 我认为这将是一种解决方法,但后来我查看了我的旧错误日志,它甚至没有抛出错误的存储过程接口。 我不知道它为什么会解决这个问题。

我还在那个页面上设置了一些PerfLogs,Rahul联系我,试图监控会话的进展情况。

现在除了奇怪的事实,那些尝试中的某些东西(以及我所做的其他任何小事)实际上解决了问题,事实上它从来没有发生在本地开始。 我不确定发生了什么,但它现在正在工作,我不会再深入挖掘它,因为我有很多项目需要注意。 在我看来,这很可能是未来可能出现的ISA服务器的一个问题,但是我对他们设置的不了解限制了我真正进入那里并四处寻找自己。 当我询问它时,我被告知它应该允许我需要通过它发送的所有内容。 无论如何,我很高兴能够继续前进并使其发挥作用。 希望所有这些能帮助处于类似情况的人! 感谢所有人的帮助!

这次我实际上找到了真正的解决方案。 它仍然没有多大意义,但我认为我将它带到这里只是为了让所有人都能看到。 事实证明,从表中提取的日期之一被存储在会话变量中作为空白(即使它不应该存在)然后以某种方式,即使有一个if语句应该已经被阻止它,它试图将会话的空字符串转换为日期。 当然很奇怪。 就好像会话在到达if语句时有一个值,然后在根据条件检查后,它将其更改为空字符串并抛出错误。

事实证明这不是一个会话问题,只是一个奇怪的日期问题。 它只出现在一个人和一个特定日期的桌子上。 我通过简单地在它周围放置一个try-catch来修复它。 从那以后,一切都为这个人做得很好。 再次感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM