[net2.0] ASPNET内置安全认证架构 的灵异问题~~~~

本人在一个项目中使用了ASPNET内置安全认证架构,感觉十分良好,测试也挺正常,但随着项目上线,我发现了一个奇怪的问题,比如A用户在这边登陆了,然后B用户也登陆了(不同的网段或同网段),而在某种特定的条件下(至于什么条件本人还没搞出来,很没责任心)B用户在登陆时会诡异的获得A用户的身份票证,(假设A用户是个超级管理员)这。。。这会出人命的啊,园子里什么鸟都有,肯定有遇到过类似的问题的大鸟,请指点一二,小弟拜上!


--------------------------------------
真正的 解决方案:
(实际上KernelOutputCache被禁用后,COOKIES依然会被分发到不同的用户主机上,也就是说所谓的MS的解决方案对偶一点用页没,当你放弃对MS的期望后,思路却一下开拓了许多,一个异常简单却有效的解决方法,用一个IFRAME包住需要产生COOKIE的部分(例如登陆)就OK了,我原来的登陆是使用AJAX,所以直接作为控件包容在页面中,在IFRAME部分的页面是不被缓冲的,所以不会受到
KernelOutputCache的任何影响!

症状

考 虑以下方案。 Microsoft ASP.NET 页包含 < % OutputCache % > 指令。 此外, ASP.NET 页面生成包含 Cookie 设置 - 响应一个 HTTP 头。 在此方案, HTTP 协议堆栈 (HTTP.sys) 内核缓存 Microsoft Internet Information Services (IIS) 6.0 中存储 ASP.NET 页。 因此, 谁访问同一页多用户可能收到相同 Cookie。


替代方法

要解决此问题, 根据适合您情况使用下列方法, 之一。


方法 1: 禁用内核缓存模式

可禁用缓存整个系统, 内核模式或者您可以禁用内核模式对于特定 ASP.NET 应用程序缓存。 此方法解决首选方法是因为仍可使用输出缓存 ASP.NET 应用程序中。 要禁用内核缓存模式, 请按照下列步骤:
1. 如果要禁用缓存整个系统, 内核模式打开 Machine.config 配置文件。 此文件位于以下文件夹中:
驱动器 : \WINDOWS\Microsoft .NET\Framework\ Version \CONFIG
注意 驱动器 是代表操作系统安装驱动器占位符。 版本 是一个占位符, 代表已安装 Microsoft.NET 框架的版本号。

如果要禁用缓存为特定 ASP.NET 应用程序, 内核模式打开 Web.config 配置文件。 此文件位于 ASP.NET 应用程序文件夹中。
2. 在配置文件, 找到 < httpRuntime > 元素, 并然后添加以下属性:
enableKernelOutputCache = " false "


方法 2: 禁用特定 ASP.NET 页面中输出缓存

禁 用特定 ASP.NET 页面生成包含 Cookie 设置 - 响应一个 HTTP 头中输出缓存。 但是, 必须确定整个应用程序可能生成一个 Cookie 中每个 ASP.NET 页。 例如, 如果使用 Cookie 来维护会话状态, 用户访问任何页面可能生成一个 cookie。

要 禁用特定 ASP.NET 页面, 中输出缓存从任何 .aspx 文件, 您不想缓存删除 < % OutputCache % > 指令。 有关 < % OutputCache % > 指令在 ASP.NET 页, 请访问 Microsoft Developer Network (MSDN) Web 站点: http://msdn2.microsoft.com/en-us/library/zd1ysf1y(VS.80).aspx

posted on 2008-04-01 10:12  LT  阅读(2215)  评论(13编辑  收藏  举报

导航

直角体Web动力