我有一个使用表单身份验证的 ASP.Net 3.0 SP1 应用程序。
在测试时,我注意到如果我查看了另一个用户正在查看的页面,其他用户的名称将显示在我的母版页上的控件中。Context.User.Identity 也适用于其他用户。
如果我切换到没有其他人正在查看的其他页面,则 Context.User.Identity 是正确的。
我很难过,并会很感激建议。
提前致谢。
克里斯
我有一个使用表单身份验证的 ASP.Net 3.0 SP1 应用程序。
在测试时,我注意到如果我查看了另一个用户正在查看的页面,其他用户的名称将显示在我的母版页上的控件中。Context.User.Identity 也适用于其他用户。
如果我切换到没有其他人正在查看的其他页面,则 Context.User.Identity 是正确的。
我很难过,并会很感激建议。
提前致谢。
克里斯
可能是因为为页面启用了输出缓存:如果页面在服务器端缓存且 VaryByParam=none,所有用户将从缓存中获得相同的副本。
我只能想到两件事会导致这种情况:
您将用户特定的数据存储在请求之间共享的位置(例如,在静态(C#)/共享(VB)变量中,在 ASP.NET 缓存中,在应用程序对象中,...)
您已启用输出缓存。
检查:
您的 aspx 和 ascx 文件中的 OutputCache 指令,
web.config 文件中的 system.web/caching 元素,
调用 HttpCacheability.SetCacheability 方法。
如果找不到问题:
尝试创建应用程序的简化版本,直到获得仍然重现不良行为的最简单版本。
在这个简化过程中,您可能会自己发现问题。如果没有,请从简化版本中发布一些代码。
确保在使用无 cookie 浏览器时未使用身份验证票证随附的链接。
还要确保查看可能在请求之间共享数据的任何其他内容。就像 DOK 说的那样,但请记住 Application 不是您可以这样做的唯一方法。
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.