代码之家  ›  专栏  ›  技术社区  ›  Josh Stodola

ASP.NET会话混合使用StateServer(可怕!)

  •  17
  • Josh Stodola  · 技术社区  · 15 年前

    我们在会话中存储两个对象。不知何故,另一个用户的一个对象被加载到另一个用户的会话中。用户不应该访问这个特定的数据,一旦看到它,他们就会知道有什么事情是非常错误的。

    我们有提供给他的数据的直观证据 当然 除非会议搞混了,否则不会发生这种事。这是一个非常可怕的情况,我们无法理解(我们无法复制它)。我们唯一的答案是责怪ASP.NET StateServer将会话变量混合在一起,这是完全不可接受的,并且使我们处于不利的位置。

    我们的应用程序是ASP.NET 2.0应用程序,运行在带有iis6的Windows Server 2003上,使用 StateServer cookieless="false" 会话模式和表单验证。

    其他人有这个问题吗?我们如何解决?

    6 回复  |  直到 7 年前
        1
  •  13
  •   ChrisW    7 年前

    我们在以前的公司遇到了这个问题,花了3个星期调试它。ASP.NET正在向用户提供其他人的会话状态。在调试环境中复制是不可能的。

    当我们发现它只是web.config中的东西时,修复程序。我记不清了,所以我花了一些时间在谷歌上。我认为这个问题与输出缓存有关。请看“会话和输出缓存”下的这篇文章。

    http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineJuly2006en-us.chm (文章标题为 通过避免这10个常见的ASP.NET陷阱,保持网站平稳运行 由Jeff Prosise于2006年7月出版的《msdn》杂志)

    如果这听起来像您的场景,那么修复程序可能只是禁用web.config中的enableKernelOutputCache选项。

    祝你好运。

        2
  •  5
  •   to StackOverflow    15 年前

    首先在您自己的代码中查找错误-这是迄今为止最有可能的解释。例如,使用静态字段或其他共享内存(如用于用户特定数据的ASP.NET缓存)。

        3
  •  3
  •   ChrisW    7 年前
        4
  •  0
  •   Wagner    15 年前

    发生了多少次?您是否检查了使用浏览器返回或使用会话ID互相发送链接的用户?

    检查状态服务器bug的一种方法是切换到另一个会话管理器,如果可以或使用SQL Server,则返回到进程内,但最好先找到一种方法来重现bug,以便进行测试。

        5
  •  0
  •   GBegen    15 年前

    两个交叉的用户是否都使用相同的缓存代理?如果是这样,那么如果URL匹配,那么一个用户可能会看到为另一个用户缓存的数据,特别是在代理不正常的情况下。

    这不是谷歌网络加速器项目的主要问题吗(现在已经停止了)?

        6
  •  0
  •   stuartdotnet    11 年前

    有了这个问题,结果是部分视图的outputcache属性。