2013-09-08 3 views
1

FormsAuthentication 쿠키 이름을 dynammically로 설정하려고합니다 (예 : guid). 내가 어떻게 할 수 있지. web.config에서 원하는대로 변경할 수 있습니다. 코드에서 동적으로 수행 할 수 없습니다. 도움을주십시오.asp.net에서 FormsAuthentication 쿠키 이름을 동적으로 변경할 수 있습니까?

<authentication mode="Forms"> 
    <forms name="myName" loginUrl="~/Account/Login" defaultUrl="~/Admin/admin" cookieless="UseCookies" slidingExpiration="true" timeout="40320"/> 
</authentication> 

내가 이렇게 할 이유는 내가 같은 호스트에 내 응용 프로그램의 여러 인스턴스를하고 난 그들이 서로의 쿠키 덮어 쓰기를 원하지 않을 것이다.

+0

'FormsAuthentication.FormsCookieName'을 사용할 수 없습니까? –

+0

또한 왜 동적으로 변경해야합니까? 응용 프로그램의 인스턴스가 여러 개있는 경우 각 응용 프로그램의 web.config에서 값을 변경하지 않는 것이 어떻습니까? –

+0

확인. 나는 그것이있을 법하지 않은 상황이라는 것을 알고있다. 하지만 난 내 응용 프로그램이 자동으로 그것을 할 수있는 능력을 가지고 싶습니다. – aminbazgiri

답변

0

코드에서이를 수행 할 수 없습니다. 속성 FormsAuthentication.FormsCookieName이 읽기 ​​전용입니다. 나는 web.config에 다음과 같은 구성을 사용합니다 :

<authentication mode="Forms"> 
    <forms configSource="forms.config" /> 
</authentication> 

그런 다음 forms.config 자신의 응용 프로그램의 각 인스턴스를 제공합니다 : 나는 꽤 몇 일에 쿠키로 어려움을 겪고있다

<forms name="CookieNameForThisInstance" /> 
+0

감사합니다. 각 응용 프로그램의 코드에서이 코드를 최소한 한 번 변경하는 방법이 있는지 여부를 알고 싶었습니다. – aminbazgiri

2

. 그것은 굉장한 학습 경험이었습니다.

그래서 내가 & 발견 볼 수있는 가능한 방법을 공유하고 싶었 : 폼 인증 쿠키 이름을 수정하는 몇 가지 해킹이 있습니다

  1. 당신은 웹의 인증 스펙의 secion에서 쿠키 이름의 변경을 자동화 할 수 있습니다가. Global.asax에서 Application_Start 이벤트의 구성 파일. Ron에게 this을 공유해 주셔서 감사합니다. 하지만 ID가 응용 프로그램 도메인을 실행하는 데 사용되는 사용자에게 디스크의 파일을 수정할 수있는 충분한 권한이 있는지 여부를 보장 할 수는 없습니다. 그래서 나는 즉각적인 해결책이 필요했기 때문에 다음과 같이 고안했다.

  2. FormsAuthentication 클래스를 볼 수있게 해주신 ILSpy에게 감사 드리며, Reflection에게 많은 감사를 보내서 클래스의 개인 필드를 수정하도록하겠습니다. 다음 코드를 사용하여 런타임에 쿠키 이름을 수정하여 다음과 같은 작은 코드를 사용하여 매력적으로 작동했습니다. 문제는이 포럼 내 첫 번째 대답은로


    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); 
        } 
    

    제안

는 허점이 요구된다.

관련 문제