ASP.NET会话状态值交换

时间:2015-08-16 22:44:40

标签: asp.net session

我们在客户硬件上运行一个旧的ASP.NET 2.0 Web表单应用程序,该应用程序广泛使用会话状态。 该网站目前在旧的Windows 2003 Web服务器上运行(即将更换),目前已配置为使用SQL Server作为会话状态存储。

我们最近发现了一个问题,即当不同用户同时点击同一页面时,某些会话数据似乎在会话之间交换。 这些用户完全不相关,具有不同的会话ID,来自不同的IP地址。

特别是有一个被交换的变量。这是一个包含许多不同信息和数据类型(字符串,整数和日期)的数组。来自ASP根源的宿醉。

两个用户都在同一页面上按下按钮,在几毫秒之内产生2个POST请求。我们的日志记录记录了会话状态中的一些值。 对这些POST请求的响应是重定向到该过程中的下一页。

日志记录为下一页记录了相隔200毫秒的2 GET请求,并记录了这2个请求的会话状态信息。除了此数组中的值之外,会话状态变量看起来正确。

这些似乎已被交换。用户A现在正在使用用户B开始使用的阵列,反之亦然。

以前有人见过这样的事吗?

该系统将在未来几个月内进行重写/升级,但在此期间需要解决此问题,直到可以完成。

由于 加文

1 个答案:

答案 0 :(得分:1)

经过数小时的代码审查后,我发现有人在类上使用静态字段,为其分配httpcontext,然后使用该静态字段中的会话。

因此会话状态变量的随机交换取决于函数被调用的确切时间。