2011-01-09 2 views
4

Global.asax에서 Application_AuthenticateRequest()를 오버로드하여 이벤트 흐름을 더 잘 이해하려고했습니다. 기본 MVC2 응용 프로그램과 함께 제공되는 멤버 자격 공급자를 사용하고 있습니다.HttpApplication 이벤트 흐름은 멤버십 및 쿠키와 어떤 관련이 있습니까?

나는이 그랬다면 내가 생각 :

public void Application_AuthenticateRequest(object sender, EventArgs args) 
    { 
     HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
     if (authCookie != null) 
     { 
      authCookie.Expires = System.DateTime.Now.AddDays(-1); // Set the cookie expires time in order to delete it 
      Response.Cookies.Add(authCookie); 
     } 
    } 

사용자가 로그인 할 수 있지만 내가 그들의 인증 쿠키를 파괴하기 때문에 그들은 로그인 양식을 제출 한 후 페이지 로딩에, 그들은 같은 로그인하지 나타날 것을 .

그러나 그런 경우는 아닙니다. 대신 성공적으로 로그인 할 수 있으며 페이지가로드 될 때 로그인 상태를 표시합니다. 그들이 쳤던 다음 페이지는 로그 아웃 할 것입니다.

시간이 지나면 쿠키가 삭제되지 않는다고 생각하여 Global.asax 내부의 Application_BeginRequest()에 코드를 삽입했습니다. 그것은 같은 결과를 낳았다.

그래도 제 시간에 쿠키를 파괴하지 않았거나 이벤트 흐름을 제대로 이해하지 못 했습니까?

답변

1

두 가지 쿠키 모음이 여기에 사용되었습니다. Request.Cookies and Response.Cookies

Request.Cookies는 현재 페이지의 브라우저에서 온 쿠키입니다. 이 컬렉션에서 읽는 대부분/모든 프로세스

Response.Cookies는 브라우저로 다시 전송 될 쿠키입니다. 응답 쿠키의 만료 값을 설정하면 먼저 브라우저로 돌아 가야하며 브라우저는 만료 된 것으로보고 다음 페이지에 쿠키가 없습니다.

Request.Cookies를 설정하려고 할 수는 있지만 읽기 전용이라고 생각합니다.

+0

그건 의미가 있습니다. 분명히 나는 ​​응답을 돌려 보낼 때 그들의 쿠키가 삭제 될 것이라고 생각했다. 그것은 마술처럼 소급하여 응답이 되돌아 오는 것에 영향을 미칠 것이다. Har har. 나는 로그 아웃하기 위해 1 페이지의 히트와 함께 살 수있다. 즉, Application_AuthenticateRequest()는 이와 같은 논리에 적합한 위치입니까? – Sgraffite

0

FormsAuthentication.SignOut(); 인증 된 사용자를 로그 아웃하는 것이 좋습니다.

+0

현재 사용자가 아닌 사용자를 로그 아웃해야한다는 것을 잊어 버렸습니다. 금지하고있어. – Sgraffite

관련 문제