1

我有一个使用表单身份验证的 ASP.Net 3.0 SP1 应用程序。

在测试时,我注意到如果我查看了另一个用户正在查看的页面,其他用户的名称将显示在我的母版页上的控件中。Context.User.Identity 也适用于其他用户。

如果我切换到没有其他人正在查看的其他页面,则 Context.User.Identity 是正确的。

我很难过,并会很感激建议。
提前致谢。
克里斯

4

3 回答 3

3

可能是因为为页面启用了输出缓存:如果页面在服务器端缓存且 VaryByParam=none,所有用户将从缓存中获得相同的副本。

我只能想到两件事会导致这种情况:

  • 您将用户特定的数据存储在请求之间共享的位置(例如,在静态(C#)/共享(VB)变量中,在 ASP.NET 缓存中,在应用程序对象中,...)

  • 您已启用输出缓存。

检查:

  • 您的 aspx 和 ascx 文件中的 OutputCache 指令,

  • web.config 文件中的 system.web/caching 元素,

  • 调用 HttpCacheability.SetCacheability 方法。

如果找不到问题:

  • 尝试创建应用程序的简化版本,直到获得仍然重现不良行为的最简单版本。

  • 在这个简化过程中,您可能会自己发现问题。如果没有,请从简化版本中发布一些代码。

于 2009-03-27T21:15:07.593 回答
2

确保在使用无 cookie 浏览器时未使用身份验证票证随附的链接。

还要确保查看可能在请求之间共享数据的任何其他内容。就像 DOK 说的那样,但请记住 Application 不是您可以这样做的唯一方法。

于 2009-03-27T21:06:27.257 回答
0

It looks like the issue was caused because I setting targetframe="_self" or Target="_self". I removed all these and everything seem to be working fine.

One other note: If I were to refresh the page it would also display the page with the correct user.

于 2009-03-29T20:26:34.870 回答