페이지. 사용자.신원.양식 이후에도 인증이 계속 참인증.로그아웃()
'로그아웃'을 누르면 다음으로 리디렉션되는 페이지가 있습니다.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
'programing' 카테고리의 다른 글
esc_url() 및 워드프레스 보안? (0) | 2023.06.30 |
---|---|
상태를 참조하지 않는 제네릭 돌연변이에서도 vuex가 제대로 작동할까요? (0) | 2023.06.30 |
프로세스 내 쓰기 메모리에 복사본 할당 (0) | 2023.06.30 |
.gitconfig에 파일을 포함할 수 있습니까? (0) | 2023.06.30 |
Git: 병합 커밋의 메시지를 편집/수정하는 방법은 무엇입니까? (0) | 2023.06.30 |