programing

페이지. 사용자.신원.양식 이후에도 인증이 계속 참인증.로그아웃()

muds 2023. 6. 30. 22:37
반응형

페이지. 사용자.신원.양식 이후에도 인증이 계속 참인증.로그아웃()

'로그아웃'을 누르면 다음으로 리디렉션되는 페이지가 있습니다.login.aspx가 있는 페이지Page_Load부르는 방법FormsAuthentication.SignOut().

마스터 페이지는 화면 오른쪽 상단에 '로그아웃' 링크를 표시하고 다음 조건으로 표시합니다.Page.User.Identity.IsAuthenticated이라true그러나 코드를 통과한 후 이 로그아웃 방법이 자동으로 설정되지 않습니다.IsAuthenticated로.false꽤 짜증나는 일이군요, 무슨 생각이라도 있나요?

Page.User.Identity.IsAuthenticated에서 값을 가져옵니다.Page.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이 인증 여부를 확인하면 나머지 요청에 대해서는 변경되지 않습니다.

예를 들어, 다른 사용자가 로그인할 때.로그인했음을 나타내는 양식 auth cookie를 설정할 때 동일한 요청에 대해 인증되었는지 확인하면 해당 양식이 반환됩니다.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

login.aspx에서 IsAuthenticated가 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우리가 로그아웃할 때도 마찬가지로 진실이 됩니다. 시 가 추가한 ▁while▁the▁on▁added▁have중다out▁is▁session▁clearing입니▁the이▁for▁log▁causes▁i▁this지는우세을션.

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

반응형