我正面临一个非常特殊的问题,即在没有任何明显原因的情况下重置会话。这是随机发生的,每几十或几百个请求一次。
我的 Web 应用程序在 Windows 2003、IIS 6.0、.NET 1.1 上运行。该应用程序有一个网页,该网页在其 Page_Load 事件期间填充了一堆 Session 变量。数据存储在 ASPNET 状态服务的进程外。
在 Page_load 事件退出并显示页面后,用户单击一个按钮,该按钮检索会话数据并对其进行一些处理。而这个 Button_click 就是问题发生的地方。在某些情况下,会话变量为 null,从而引发 nullRefException。
我们的跟踪显示 Button_click 事件期间的 sessionID 是一个全新的会话,其 ID 与 Page_Load 事件的会话不同。因此,应用程序无法检索在 Page_Load 期间存储的数据。我们的事件日志显示,有问题的请求的会话变量确实在 Page_load 事件期间填充,并且响应发送没有问题,这通常会保留数据。
我们已经排除了会话超时;尽管超时仍会导致相同的 nullRefException,但 Page_load 中的相同会话 ID 将用于检索不存在的数据。在这种情况下,sessionID 与原始的不同。
我们不会以任何方式弄乱 ASPNET cookie,我们不会使用 session.abandon,也不会无意中从会话中删除项目。
我的问题是:哪些服务器端因素可能导致持卡人的会话被这样重置?应用程序事件日志不包含任何有用的信息。
此外,是否有任何客户端(例如 cookie 篡改)可以强制 IIS 在页面的后续回发时分配新会话?
提前谢谢了。