【发布时间】:2015-08-16 22:44:39
【问题描述】:
我们有一个旧的 ASP.NET 2.0 Web 表单应用程序在客户硬件上运行,它广泛使用会话状态。 该网站目前在旧的 Windows 2003 Web 服务器上运行(即将被替换),并且当前配置为使用 SQL Server 进行会话状态存储。
我们最近发现了一个问题,当不同用户同时点击同一页面时,似乎在会话之间交换了一些会话数据。 这些用户完全不相关,具有不同的会话 ID,并且来自不同的 IP 地址。
特别是有 1 个变量正在被交换。这是一个包含许多不同信息和数据类型(字符串、整数和日期)的数组。其 ASP 根源的宿醉。
两个用户都在同一页面上按下了一个按钮,彼此在几毫秒内生成了 2 个 POST 请求。我们的日志记录了会话状态中的一些值。 对这些 POST 请求的响应是重定向到进程中的下一页。
日志记录了 2 个相隔 200 毫秒的 GET 请求,并记录了这 2 个请求的会话状态信息。除了该数组中的值之外,会话状态变量看起来是正确的。
这些似乎已被交换。用户 A 现在正在使用用户 B 开始使用的数组,反之亦然。
有没有人见过这样的事情?
系统将在未来几个月内重写/升级,但我们确实需要一个临时解决方案,直到可以完成为止。
谢谢 加文
【问题讨论】:
-
提供一些代码...?
-
是否正在使用无 cookie 会话?
-
是否尝试过网络跟踪以显示来自每个客户端的表单值按预期发送?在您的其他用户中没有其他实例吗?一个基本的应用程序和/或系统错误重新状态/会话管理似乎可能会影响两个以上的特定用户。
-
它使用 cookie 作为会话 ID。它并非孤立于 2 个特定用户,并且发生过几次,似乎是 2 个不同用户在同一页面上执行相同的操作。