ASPNET进程外会话被神秘地重置

时间:2012-07-12 12:24:43

标签: iis-6 session-state sessionid out-of-process

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

我的Web应用程序在Windows 2003,IIS 6.0,.NET 1.1上运行。该应用程序有一个网页,在其Page_Load事件期间填充一堆Session变量。数据在ASPNET State Service中存储在进程外。

在Page_load事件退出并显示页面后,用户单击一个按钮,该按钮将检索会话数据并执行一些操作。 而这个Button_click就是问题发生的地方。在某些情况下,session变量为null,引发nullRefException。

我们的跟踪显示Button_click事件期间的sessionID是一个全新的会话,其ID与Page_Load事件的会话不同。因此,应用程序无法检索在Page_Load期间存储的数据。我们的事件日志显示,在Page_load事件期间确实填充了有问题请求的会话变量,并且发送的响应没有问题,这通常会使数据持久存在。

我们排除了会话超时;虽然超时仍会导致相同的nullRefException,但是来自Page_load的相同会话ID将用于检索不存在的数据。在这种情况下,sessionID与原始ID不同。

我们没有以任何方式搞乱ASPNET cookie,我们不使用session.abandon,也不会无意中从会话中删除项目。

我的问题是:哪些服务器端因素可能导致持卡人的会话被重置?应用程序事件日志不包含任何有用的信息。

此外,是否有任何客户端(例如cookie篡改)可能会强制IIS在页面的后续回发时分配新会话?

非常感谢提前。

1 个答案:

答案 0 :(得分:2)

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

我正在设计一个网站,我发现了很难的方式,这意味着我必须重新设计我正在开发的这个网站的一部分。当您在活动的IIS文件夹中创建或删除文件夹(来自asp.net页面)时,它会重置该网站的所有会话。这意味着网站上的每个用户都会立即删除其会话。

如果您可以控制服务器,请将文件存储在IIS文件夹之外,并根据需要将其流式传输。如果您无法控制服务器,则必须删除任何包含文件夹的工作。