0

我正面临一个非常特殊的问题,即在没有任何明显原因的情况下重置会话。这是随机发生的,每几十或几百个请求一次。

我的 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 在页面的后续回发时分配新会话?

提前谢谢了。

4

1 回答 1

2

我不确定这是否适用于您的情况,但它可能对其他人有所帮助。

我正在设计一个网站,但我发现了一条艰难的道路,这意味着我必须重新设计我正在处理的网站的一部分。当您在活动 IIS 文件夹中创建或删除文件夹(从 asp.net 页面)时,它会重置网站的所有会话。这意味着当前网站上的每个用户都会立即删除他们的会话。

如果您可以控制服务器,请将文件存储在 IIS 文件夹之外并根据需要将它们流式传输。如果您无法控制服务器,则必须删除所有使用文件夹的工作。

于 2012-11-28T05:34:26.247 回答