在 Medium Trust 中工作时,是否有一种简单的方法可以从 web.config 中为 anonymousIdentification 部分读取 cookieName?
我想要做的是阻止创建成千上万的匿名用户,因为:
- 人们关闭了 cookie,或者
- 访问者是没有 cookie 功能的蜘蛛/机器人。
我试图通过检查 Application_BeginRequest 中是否存在表单身份验证或匿名标识 cookie 来实现这一点。如果没有 cookie,我会设置一个标志来阻止将任何内容保存到数据库中。
但为了做到这一点,我必须知道 cookie 的名称。为此,我尝试这样做:
AuthCookieName = FormsAuthentication.FormsCookieName;
var anonSection = (AnonymousIdentificationSection)WebConfigurationManager.GetSection("system.web/anonymousIdentification");
if (anonSection != null)
AnonCookieName = anonSection.CookieName;
虽然检索到 auth cookie 名称没有任何问题,但 WebConfigurationManager 会引发安全异常:System.Security.SecurityException: Request for the permission of type 'System.Configuration.ConfigurationPermission, System.Configuration, Version=4.0.0.0, Culture=neutral , PublicKeyToken=b03f5f7f11d50a3a' 失败。
我知道这是一个信任问题,因为当我给予高或完全信任时,异常就会消失。但是,重要的是这在中等信任中有效,我无法修改 machine.config。
有没有办法requirePermission="false"
在我的应用程序的 web.config 级别为 anonymousIdentification 部分设置?
我是否必须在 XML 文档中加载 web.config 并手动解析它?
其他想法?
还有比这更好的吗?我只跑一次Application_Start()
。
XmlDocument config = new XmlDocument();
config.Load(Server.MapPath("~/Web.config"));
XmlNode anonSection = config.SelectSingleNode("configuration/system.web/anonymousIdentification");
if (anonSection != null)
{
XmlAttribute nameAttr = anonSection.Attributes["cookieName"];
if (nameAttr != null)
AnonCookieName = nameAttr.Value;
}
if (string.IsNullOrWhiteSpace(AnonCookieName))
AnonCookieName = ".ASPXANONYMOUS";