2009-07-09 2 views
8

(자세한 상황은 아래의 질문을 참조하십시오) :<machineKey decryptionKey = "자동 생성"... IIS에서 무시됩니다. 이전 세션의 쿠키를 무효화하지 않습니다

은 Web.config의에서

<machineKey 
     validationKey="AutoGenerate,IsolateApps" 
     decryptionKey="AutoGenerate,IsolateApps"/> 

이 앱에 새로운 machineKey을 자동 생성하는 데 실패하는 어떤 상황에 있는가를 수영장 재활용? 이것은 내가 MVC 애플리케이션에 표준 ASP.NET있는 FormsAuthentication를 사용하고 있는데 제가 보는 행동 ...


입니다. FormsAuthentication.GetAuthCookie을 사용하여 사용자를 로그인하고 브라우저의 세션을 사용하여 영구적 인 쿠키를 사용하지 않으면 IIS 응용 프로그램 풀 재활용을 통해이 쿠키에 대한 세션의 지식이 무효화됩니다. 영구 쿠키가없는 모든 사용자를 로그 아웃하십시오.

이것은 IIS 설치 (XP) 중 하나에서 발생하지만 다른 IIS 구성 (Server 2K3)에서는 FormsAuthentication 쿠키 (표준 이름 ".ASPXAUTH")가 유효한 상태로 계속 사용자를 인증합니다.

왜 이런 일이 발생했는지 또는 어떤 구성이이 동작을 제어하는지 알 수 있습니까?

명백히 앱 풀을 재활용하면 브라우저가 .ASPXAUTH 쿠키를 보내고 있는지 여부를 제어 할 수 없습니다 (브라우저를 닫지 않고 쿠키가 만료되지 않은 경우). 는 IIS의 경우 나는 Application_BeginRequest 이벤트 기간 동안 Request.Cookies에서 들어오는 쿠키를 볼 수있는, 즉 제대로 재활용 후 인증을 거부 설치에

...하지만 Global.asax.cs에서 사용할 수있는 다음 이벤트로 제어 이동 한 번 (Application_AuthenticateRequest), 쿠키는 Request.Cookies 컬렉션에서 삭제되었습니다.

IIS/ASP.NET 구성 모두에 이러한 문제가 발생하지 않는 이유는 무엇입니까? 이 질문을 형성하는 간단한 방법 명확하지 않다 경우


이다 : 나는 Application_BeginRequest에서 Application_AuthenticateRequest로, 단일 요청으로, 단계 때

{System.Web.HttpCookie}에서 HttpContext.Current.Request.Cookies[".ASPXAUTH"] 변화가 null로 하는가?


더 많은 디버깅 정보 :

나는 내가 전에 요청 동안 다음 Global.asax.cs의 FormsAuthentication_OnAuthenticate 이벤트에 다음 코드 ...

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
if (cookie != null) 
{ 
    var val = cookie.Value; 
    try 
    { 
     FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(val); 
    } 
    catch (Exception) 
    { 
    } 
} 

을 ... 연결하는 경우 IIS 응용 프로그램 풀을 재활용하면 아무런 예외도 발생하지 않습니다. IIS 응용 프로그램 풀 재활용 후 브라우저에서 똑같은 .ASPXAUTH 쿠키가 전송되면 암호화 예외가 발생합니다 ("채우기가 유효하지 않으므로 제거 할 수 없습니다.").

왜 그런가요?

+1

하나는 ASP를 사용하도록 구성되어 있습니까?inproc 대신 세션을 저장하는 NET State Service? – devstuff

+0

좋은 생각 - 아니, 둘 다 InProc을 사용하고 있습니다. 불행히도. – kamens

답변

-2

양식 인증 쿠키는 세션 상태와 아무 관련이 없습니다.

+0

1) 앱 풀을 재활용하면 InProc 세션 관리를 사용하는 경우 세션을 재활용하지만 이는 분명히 ASPXAUTH 쿠키를 조작합니다 (BeginRequest 이벤트 이후에 제거 될 때 보임). 2) "브라우저 세션"을 표시하여 질문을 명확하게 작성하겠습니다. MS 설명서에서 : createPersistentCookie 형식 : System.Boolean 내구성있는 쿠키 (브라우저 세션에서 저장되는 쿠키)를 만들려면 true이고, 그렇지 않으면 false입니다. 그렇지 않으면 false입니다. – kamens

+0

말문. 쿠키는 클라이언트에 있습니다. 서버에 수행 할 수있는 작업은 클라이언트에 저장된 쿠키를 제거하지 않습니다. –

+0

그렇게 생각 하겠지? Application_BeginRequest가 끝날 때까지 쿠키가 서버에서 제거되지 않습니다. 나는이 소리가 얼마나 우스 꽝인지 안다. 그래서 나는이 질문을 게시하고있다. 나는 디버거를 가지고 있고 Application_BeginRequest에서 Application_AuthenticateRequest로 이동할 때 HttpContext.Current.Request.Cookies [ "ASPXAUTH"]의 값은 {System.Web.HttpCookie}에서 null로 바뀐다. – kamens