2017-11-29 20 views
0

내 사이트에서 사용자 로그인과 로그 아웃을 추적 할 수 있기를 원합니다.asp.net : FormsAuthentication.SignOut()가 쿠키 승인을 지우지 않음

그것에 대한 http 모듈을 작성했습니다.

로그인을 확인할 수 있습니다. 그러나 로그 아웃은 문제가 있습니다.

내 초기 생각은 Application_EndRequest 핸들러 내에서 쿠키가 파괴되었는지 확인하는 것이 었습니다. FormsAuthentication.SignOut()을 호출 한 후 요청 쿠키 컬렉션에 여전히 인증 쿠키가 포함되어 있으므로 좋지 않습니다.

// In Application_EndRequest 

if (httpRequest.IsAuthenticated) 
{ 
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName]; 

    // Doesn't work. "authCookie" is always non-empty 
    if (authCookie == null || authCookie.Value == "") 
    { 
     //logout detected 
    } 
} 
else 
{ 
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName]; 

    if (authCookie != null) 
    { 
     //login detected 
    } 
} 

올바른 방법이 아닌 경우 알려 주시기 바랍니다.

답변

1

FormsAuthentication.SignOut()httpRequest.Cookies[FormsAuthentication.FormsCookieName]을 동일한 요청으로 보내시겠습니까?

그렇다면 SignOut()은 현재 요청에서 쿠키를 유효하게 만들 수 없기 때문에 쿠키가 유효합니다.

별도의 요청으로 쿠키가 유효한지 여부를 테스트해야합니다. 그렇더라도 Request.IsAuthenticated을 호출하면 명시 적으로 Cookies[FormsAuthentication.FormsCookieName]을 호출 할 필요가 없으므로 충분합니다.

+0

예, 같은 요청에있는 두 가지를 모두 호출합니다. 별도의 요청으로 쿠키를 확인하시는 것이 좋습니다. 하지만 쿠키는 항상 null이되지 않습니까? null 쿠키가 반드시 로그 아웃을 의미하는 것은 아닙니다. 익명 사용자에게는 예를 들어 쿠키가 없습니다. – Linas

+1

'별도의 요청으로 쿠키를 확인하는 것이 좋습니다. '*** 예 ***. ***는 쿠키가 항상 null이 아니므로 클라이언트 컴퓨터의 쿠키가 설정되면 클라이언트 컴퓨터에서 쿠키를 직접 삭제할 수 없습니다 . 그러나 만료일을 과거 날짜로 설정할 수 있으며 유효 기간이 만료됩니다. 그런 다음 브라우저는 만료 된 쿠키를 나중에 정리합니다. 'FormsAuthentication.SignOut()'을 호출하면 충분합니다. 나는 쿠키가 삭제되는 것에 대해 걱정하지 않을 것입니다. – Win