【问题标题】:ASP.NET Session State values swappingASP.NET 会话状态值交换
【发布时间】: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 个不同用户在同一页面上执行相同的操作。

标签: asp.net session


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2019-10-28
    • 2011-10-11
    • 2010-09-26
    相关资源
    最近更新 更多