Page.User.Identity.IsAuthenticated는 FormsAuthentication.SignOut () 후에도 여전히 true입니다.
'로그 아웃'을 누르면를 호출 login.aspx
하는 Page_Load
메서드 가있는 페이지로 리디렉션되는 페이지가 있습니다 FormsAuthentication.SignOut()
.
마스터 페이지가 표시 화면의 오른쪽 상단에있는 '로그 아웃'링크 및이 조건에 표시 Page.User.Identity.IsAuthenticated
입니다 true
. 그러나 코드를 단계별 후,이 signout 방법은 자동으로 설정하지 않습니다 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이 인증 여부를 확인하면 나머지 요청에 대해 변경되지 않습니다.
예를 들어, 누군가가 로그인 할 때. 로그인되었음을 나타내는 양식 인증 쿠키를 설정하면 동일한 요청에서 인증되었는지 확인하면을 반환 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
IsAuthenticated 는 login.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());
}
'IT Share you' 카테고리의 다른 글
distutils : 사용자 정의 매개 변수를 setup.py에 전달하는 방법은 무엇입니까? (0) | 2020.11.30 |
---|---|
Azure 저장소 위치에 하위 컨테이너를 만드는 방법 (0) | 2020.11.30 |
텍스트 파일을 만들고 bash를 사용하여 채우기 (0) | 2020.11.30 |
Ruby 정규식을 여러 줄로 분할 (0) | 2020.11.29 |
파이썬에서 어떻게 'git pull'을 호출 할 수 있습니까? (0) | 2020.11.29 |