IT Share you

Page.User.Identity.IsAuthenticated는 FormsAuthentication.SignOut () 후에도 여전히 true입니다.

shareyou 2020. 11. 30. 20:14
반응형

Page.User.Identity.IsAuthenticated는 FormsAuthentication.SignOut () 후에도 여전히 true입니다.


'로그 아웃'을 누르면를 호출 login.aspx하는 Page_Load메서드 가있는 페이지로 리디렉션되는 페이지가 있습니다 FormsAuthentication.SignOut().

마스터 페이지가 표시 화면의 오른쪽 상단에있는 '로그 아웃'링크 및이 조건에 표시 Page.User.Identity.IsAuthenticated입니다 true. 그러나 코드를 단계별 후,이 signout 방법은 자동으로 설정하지 않습니다 IsAuthenticatedfalse, 어떤 아이디어가 매우 성가신이다?


Page.User.Identity.IsAuthenticatedPage.User불행히도 읽기 전용이며을 호출 할 때 업데이트되지 않는 (분명히) 값을 가져옵니다 FormsAuthentication.SignOut().

다행히도 수정할 수있는 Page.User값을 가져옵니다 Context.User.

// HttpContext.Current.User.Identity.IsAuthenticated == true;

FormsAuthentication.SignOut();
HttpContext.Current.User =
    new GenericPrincipal(new GenericIdentity(string.Empty), null);

// now HttpContext.Current.User.Identity.IsAuthenticated == false
// and Page.User.Identity.IsAuthenticated == false

이는 현재 사용자를 로그 아웃하고 리디렉션을 수행하지 않고 실제 페이지로 응답하려는 경우에 유용합니다. IsAuthenticated동일한 페이지 요청 내에서 필요한 위치를 확인할 수 있습니다 .


사람은 요청 당 한 번만 인증됩니다. ASP.NET이 인증 여부를 확인하면 나머지 요청에 대해 변경되지 않습니다.

예를 들어, 누군가가 로그인 할 때. 로그인되었음을 나타내는 양식 인증 쿠키를 설정하면 동일한 요청에서 인증되었는지 확인하면을 반환 false하지만 다음 요청에서는을 반환 true합니다. 누군가를 로그 아웃 할 때도 마찬가지입니다. 해당 요청 기간 동안 여전히 인증되지만 다음 요청에서는 더 이상 인증되지 않습니다. 따라서 사용자가 링크를 클릭하여 로그 아웃하면 로그 아웃 한 다음 로그인 페이지로 리디렉션해야합니다.


비슷한 문제가 있었던 것을 기억하고 로그 아웃 할 때 양식 인증 쿠키를 만료하여 해결했다고 생각합니다.

FormsAuthentication.SignOut();
Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddYears(-1);

login.aspx에서 로그 아웃 코드를 실행하는 이유는 무엇입니까?

이 코드를 logout.aspx에 넣으십시오.

FormsAuthentication.SignOut()
Session.Abandon()
FormsAuthentication.RedirectToLoginPage()
HttpContext.Current.ApplicationInstance.CompleteRequest()
return

IsAuthenticatedlogin.aspx에서 false가 됩니다. 이제 로그인 및 로그 아웃 코드가 분리되었습니다 : 단일 책임.


login.aspx Page_Load 메서드에서 :

if (!this.IsPostBack)
{
    if (HttpContext.Current.User.Identity.IsAuthenticated)
    {
        FormsAuthentication.SignOut();
        Response.Redirect(Request.RawUrl);
    }
}

내 응용 프로그램 중 하나에서 자격 증명으로 로그인 할 때 응용 프로그램의 다른 양식으로 이동 한 다음 탐색 한 양식 URL 중 하나를 복사 한 다음 응용 프로그램에서 로그 아웃했습니다. 검색 탭에 브라우저가 로그인하지 않고 내 응용 프로그램의 특정 양식으로 이동하는 URL을 붙여 넣었습니다. page.User.Identity.IsAuthenticated로그 아웃 할 때에도 폼 인증이 으로 확인되는 동안 그 원인은 내가 추가 한 로그 아웃시 세션을 지우는 동안입니다.

Response.Cookies[FormsAuthentication.FormsCookieName].Expires = DateTime.Now.AddYears(-1);

이것으로 나는 그 문제를 다시 page.User.Identity.IsAuthenticated얻지 못하고 로그인하지 않고 응용 프로그램의 다른 양식으로 이동할 때 플래그 가 거짓으로 변합니다.


최신 정보

내 대답이 많은 사람들과 작동하지 않는다는 의견을 받았습니다. 나는 내 의견을 찢은 후 2011 에서이 답변을 썼습니다. 그래서 나는 그것이 문제를 해결했다고 확신합니다.

나는이 6 년 된 문제를 조사하기 시작했고 만료 된 날짜가있는 쿠키를 다시 생성하여 쿠키를 삭제하는 적절한 방법이라고 생각하는 이 솔루션에 도달했습니다.


이것은 나를 위해 작동합니다

public virtual ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
        foreach (var cookie in Response.Cookies.AllKeys)
        {
            Response.Cookies.Remove(cookie);
        }
        return RedirectToAction(MVC.Home.Index());
    }

참고 URL : https://stackoverflow.com/questions/4050925/page-user-identity-isauthenticated-still-true-after-formsauthentication-signout

반응형