几天来,我一直在与 Cookies 作斗争。这是一次很棒的学习经历。
所以想分享一下我发现和发现的可能方式:有几个HACKs可以修改Forms Authentication Cookie name:
您可以在 Global.asax 的 Application_Start 事件中的 Web.Config 文件的 Authenticaiton 部分下自动修改 cookie 名称。感谢罗恩分享这个。但我不能保证其身份将用于运行应用程序域的用户是否有足够的权限来修改磁盘上的文件。因此我需要一个即兴的解决方案,所以我设计了以下方法。
感谢 ILSpy 让我看到 FormsAuthentication 类的内部,非常感谢 Reflection 让我修改了一个类的私有字段。我使用以下代码在运行时使用以下一小段代码修改 cookie 名称,这就像一个魅力!
protected void Application_Start(Object sender, EventArgs e)
{
// This will enforce that FormsAuthentication class is loaded from configuration settings for the application.
FormsAuthentication.Initialize();
// The new cookie name whatever you need can go here, I needed some value from my application setting to be prefixed so I used it.
string newCookieName = string.Format("{0}.ASPXAUTH", ConfigurationManager.AppSettings["SomeSettingThatIsUniquetoSite"]);
// Modifying underlying baking field that points to FormsAuthentication.FormsCookieName
Type type = typeof(FormsAuthentication);
System.Reflection.FieldInfo field = type.GetField("_FormsName", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static);
field.SetValue(null, newCookieName);
}
请求建议,漏洞,因为这是我在这个论坛上的第一个答案。