18

我们在会话中存储了两个对象。不知何故,来自另一个用户的一个对象被加载到另一个用户的会话中。用户应该无权访问这些特定数据,并且一旦他们看到它,他们就知道事情很不对劲。

我们有提供给他的数据的视觉证据,除非会话混淆,否则肯定不会发生这种情况。这是一个非常可怕的情况,我们无法弄清楚(我们无法重现它)。对我们来说,唯一的答案是责怪 ASP.NET StateServer 将会话变量混在一起,这是完全不能接受的,并且使我们处于不利地位。

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

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

4

6 回答 6

15

我们在我以前的公司遇到了这个确切的问题,并花了 3 周的时间来调试它。ASP.NET 为用户提供了其他人的会话状态。在调试环境中复制真的是不可能的。

当我们发现它只是 web.config 中的某些内容时的修复。我不完全记得它,所以我花了一些时间谷歌搜索。我相信这个问题与输出缓存有关。查看“会话和输出缓存”下的这篇文章。

http://download.microsoft.com/download/3/a/7/3a7fa450-1f33-41f7-9e6d-3aa95b5a6aea/MSDNMagazineJuly2006en-us.chm(文章标题为通过避免这 10 个常见的 ASP.NET 来保持站点平稳运行Pitfalls by Jeff Prosise 在 2006 年 7 月版的 MSDN 杂志上)

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

祝你好运。

于 2009-10-29T21:38:37.473 回答
6

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

于 2009-10-29T20:20:01.103 回答
3

可能的答案 - 使用无 cookie 会话状态报告的类似问题。

会话显示错误

编辑 - 添加

另一个可能的答案:

当 ASP.NET 页生成包含 Set-Cookie 响应的 HTTP 标头时,ASP.NET 页存储在 IIS 6.0 的 HTTP.sys 内核缓存中

于 2009-10-29T20:50:18.580 回答
0

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

确定状态服务器错误的一种方法是切换到另一个会话管理器,如果可以或使用 SQL Server,则回退到进程内,但最好先找到一种方法来重现错误,以便您可以测试它。

于 2009-10-29T20:32:33.490 回答
0

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

这不是 Google Web Accelerator 项目(现已停止)的主要问题吗?

于 2009-10-29T21:57:26.303 回答
0

有这个问题,原来是局部视图上的一个OutputCache属性。

于 2014-02-24T06:49:21.857 回答