문제

박살이 내 머리에 대해 이 비트를 너무 오래입니다.지 못하게 하는 방법은 무엇입니까에서 사용자의 브라우징 사이트의 페이지를 후 로그인을 사용하여 FormsAuthentication.아웃?제가 기대하는 것이다:

FormsAuthentication.SignOut();
Session.Abandon();
FormsAuthentication.RedirectToLoginPage();

하지만 그렇지 않습니다.면 URL 을 입력 직접 수은 여전히 페이지의 찾아보기.용 롤-네-자신의 보안에있는 동안 그래서 나는 잊고 왜 이 작동하지 않습니다.

도움이 되었습니까?

해결책

사용자는 여전히 둘러보기 때문에 귀하의 웹사이트 쿠키가 삭제되지를 호출할 때 FormsAuthentication.SignOut() 그리고 그들은 인증된 모든 새로운 요청을 합니다.MS 문서를 말한다 쿠키가 삭제됩니다 하지만 그들은하지 않는,버그?그것은 정확히 동일 Session.Abandon(), 쿠키는 것은 아직도있다.

변경해야 합 코드를 이:

FormsAuthentication.SignOut();
Session.Abandon();

// clear authentication cookie
HttpCookie cookie1 = new HttpCookie(FormsAuthentication.FormsCookieName, "");
cookie1.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie1);

// clear session cookie (not necessary for your current problem but i would recommend you do it anyway)
SessionStateSection sessionStateSection = (SessionStateSection)WebConfigurationManager.GetSection("system.web/sessionState");
HttpCookie cookie2 = new HttpCookie(sessionStateSection.CookieName, "");
cookie2.Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie2);

FormsAuthentication.RedirectToLoginPage();

HttpCookieSystem.Web 네임스페이스가 있습니다. .

다른 팁

처럼 들리는 당신이 있지 않는 귀하의 웹입니다.config 권한 섹션이 올바르게 설정되니다.아래 참조에 대한 예입니다.

<authentication mode="Forms">
  <forms name="MyCookie" loginUrl="Login.aspx" protection="All" timeout="90" slidingExpiration="true"></forms>
</authentication>
<authorization>
  <deny users="?" />
</authorization>

두 개를 사용하여 위의 게시물에 의해 x64igor 필 Haselden 해결 this:

1.x64igor 준 예을 로그아웃:

  • 하세요 명확한 인증 쿠키고 세션 쿠키 을 전달하여 빈에서 쿠키를 응답을 로그아웃.

    public ActionResult LogOff()
    {
        FormsAuthentication.SignOut();
        Session.Clear();  // This may not be needed -- but can't hurt
        Session.Abandon();
    
        // Clear authentication cookie
        HttpCookie rFormsCookie = new HttpCookie( FormsAuthentication.FormsCookieName, "" );
        rFormsCookie.Expires = DateTime.Now.AddYears( -1 );
        Response.Cookies.Add( rFormsCookie );
    
        // Clear session cookie 
        HttpCookie rSessionCookie = new HttpCookie( "ASP.NET_SessionId", "" );
        rSessionCookie.Expires = DateTime.Now.AddYears( -1 );
        Response.Cookies.Add( rSessionCookie );
    

2.필 Haselden 게 예상을 방지하는 방법에 캐싱한 후 로그아웃:

  • 필요하신 캐시를 무효화에 클라이언트 측의 통해 응답.

        // Invalidate the Cache on the Client Side
        Response.Cache.SetCacheability( HttpCacheability.NoCache );
        Response.Cache.SetNoStore();
    
        // Redirect to the Home Page (that should be intercepted and redirected to the Login Page first)
        return RedirectToAction( "Index", "Home" ); 
    }
    

여기에서 핵심은 당신이 말하는"나는 URL 을 입력 직접...".

에서는 기본적으로 인증 형태의 브라우저 캐시 페이지를 이용자에게 있습니다.도록 선택하는 URL 에서 직접 브라우저의 주소는 드롭다운 상자,또는 입력,그것을 얻을 수 있습 페이지에서는 브라우저의 캐시 및 가지 않을 다시 서버를 확인하는 인증/승인받습니다.이 솔루션을 방지하는 클라이언트 측에서 캐싱 Page_Load 이벤트의 각 페이지에서,또는 OnLoad()의 기본 페이지:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

수도 있습을 전화:

Response.Cache.SetNoStore();

했으로 고생하기 전에이 너무입니다.

여기에 대한 비유는 무엇 될 것으로 보인다.새로운 고객,조,제공하는 사이트에서 로그를 통해 로그인 페이지를 사용하여 FormsAuthentication.ASP.NET 생성하는 새로운 정체성에 대한 조,제공 그는 쿠키입니다.쿠키처럼 키를 집으로 조와 함께 반환하는 핵심,그는 열 수 있습니다.각 방문자는 주어진 새로운 키와 새로운 잠금을 사용합니다.

FormsAuthentication.SignOut() 라고,이 시스템은 조을 잃고 열쇠입니다.일반적으로 이동,이후 조 더 이상은 키에는 얻을 수 없습니다.

그러나,경우 조지 돌아온다 는 손실 키,그가 다시 보자!

에서 무엇을 말할 수 있는 방법은 없을 말 ASP.NET 을 변경에 잠금 문의하세요.

방법은 내가 살 수 있습이 기억하는 조의 이름 세션에서 변수입니다.을 때 그는 로그아웃하면 나는 포기하는 세션이 필요 없이 자신의 이름을 더 이상입니다.나중에 체크인하는 경우에는 그에 허용되는,나는 단순히 비교 자신의 정체성입니다.이름이 현재 세션이고,일치하지 않는 경우,그는 유효하지 않은 방문자입니다.

즉,웹사이트에 의존하지 않는, User.Identity.IsAuthenticated 지 않고도 확인하 세션 변수!

이것이 나를 위해

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

후에 마지막으로 검색이 나를 위해 일했습니다.내가 도움이 되기를 바랍니다.

public ActionResult LogOff()
{
    AuthenticationManager.SignOut();
    HttpContext.User = new GenericPrincipal(new GenericIdentity(string.Empty), null);
    return RedirectToAction("Index", "Home");
}

<li class="page-scroll">@Html.ActionLink("Log off", "LogOff", "Account")</li>

코드시 보장해야 올바르게 제거하는 형태의 인증 토큰,그래서 그것은 가능한 폴더/페이지 질문을하지 않은 실제로 보호됩니다.

당신은 확인 페이지에 액세스할 수 없습니다 전에는 로그인이 발생?

게시할 수 있습니다.config settings 로그인 코드를 사용하고 있는?

작성되었습에 대한 기본 클래스를 모든 나의 페이지를 그리고 동일한 문제입니다.나는 다음과 같은 코드고 그것은 작동하지 않았다.추적하여 제어 패스에서 RedirectToLoginPage()문장을 다음없이 라인을 리디렉션됩니다.

if (_requiresAuthentication)
{
    if (!User.Identity.IsAuthenticated)
        FormsAuthentication.RedirectToLoginPage();

    // check authorization for restricted pages only
    if (_isRestrictedPage) AuthorizePageAndButtons();
}

내가 있다는 것을 발견은 두 가지 솔루션입니다.하거나 수정할 수 FormsAuthentication.RedirectToLoginPage();할

if (!User.Identity.IsAuthenticated)
    Response.Redirect(FormsAuthentication.LoginUrl);

하거나 수정할 수니다.config 추가하여

<authorization>
  <deny users="?" />
</authorization>

두 번째 경우에,추적하는 동안,제지 도달하는 요청된 페이지입니다.그것은 리다이렉션되는 즉시 로그인 url 을 타격하기 전에 휴식점이다.따라서 아웃()메소드지 않는 문제가 리다이렉션 방법은 하나입니다.

나는 누군가가 도움이 될 수 있습니다

감사

나는 그 제안의 일부는 여기에 그 동안 수 있었을 사용하여 브라우저의 뒤로 버튼을 클릭에서 메뉴 선택[허]한 토큰[ActionResult]나를 보내신 오른쪽에 다시 로그인 화면.

여기에 내가 로그아웃 코드:

        FormsAuthentication.SignOut();
        Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(-1));
        HttpCookie cookie = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName];
        if (cookie != null)
        {
            cookie.Expires = DateTime.Now.AddDays(-1);
            Response.Cookies.Add(cookie);
        }

지만 다시 기능에 브라우저 내게 다시 및 표시되는 보안 메뉴(난 여전히 일하는 것)나는 아무것도 할 수 없는 것이 확보되었습니다.

나는 시도로 대부분의 답변이 스레드에 있습니다.결국이 이와

protected void btnLogout_Click(object sender, EventArgs e)
{
    FormsAuthentication.Initialize();
    var fat = new FormsAuthenticationTicket(1, "", DateTime.Now, DateTime.Now.AddMinutes(-30), false, string.Empty, FormsAuthentication.FormsCookiePath);
    Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(fat)));
    FormsAuthentication.RedirectToLoginPage();
}

그것을 발견하기: http://forums.asp.net/t/1306526.aspx/1

이 대답은 기술적으로 동일하 Khosro.Pakmanesh.나는 그것을 게시하는 방법을 명확히 그의 대답은 다릅니다 다른 답변에서 이러 스레드에서 사용하는 경우 사용할 수 있습니다.

일반하여 명확한 사용자 세션을,일을

HttpContext.Session.Abandon();
FormsAuthentication.SignOut();

이 효과적으로 로그아웃을 사용합니다. 그러나, 는 경우에 요청해야 합 확인 Request.isAuthenticated (수 있으므로 종종에서 일어나는 권한 필터,예를 들어),다음은 당신을 찾을 것입니다

Request.isAuthenticated == true

도 _after 았 HttpContext.Session.Abandon()FormsAuthentication.SignOut().

는 유일한 것이 근무하고 있었다

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

을 효과적으로 세트 Request.isAuthenticated = false.

이 일어나고 시작했을 때 나는 설정 인증>forms>경로를 제공Web.config.을 제거하는 문제를 해결,그리고 간단한 FormsAuthentication.SignOut(); 다시 제거하는 쿠키입니다.

그것은 될 수 있는 로그인에 하위 도메인(sub1.domain.com 고)하려고 다음을에서 로그 아웃 다른 하위 도메인(www.domain.com).

같은 문제는 아웃()겉보기를 제대로 하지 못했을 제거합니다.하지만 특정한 경우,어디에 다른 논리를 발생하는 리디렉션합니다.후에 내가 이 두번째 리디렉션(와 함께 그것을 대체하는 오류 메시지),문제에 갔습니다.

문제되어 있어야하는 페이지로 리디렉션된 잘못된 시간에 따라서,트리거되지 않고 인증합니다.

는 데에도 유사한 문제는 이제 그리고 문제에 사례뿐 아니라 원래 포스터의 리디렉션합니다.기본적으로 합니다.리디렉션으로 예외가 발생하는 즉시 거품까지 발견되고 리다이렉션이 즉시 실행되는 이를 방지하기정 쿠키에서 컬렉션을 전달되는 클라이언트.는 경우에 당신은 코드를 수정하여 사용:

Response.Redirect("url", false);

이렇게 하면 예외는 것을 허용하는 쿠키는 것이 올바르게 전송되었습니다 다시 클라이언트입니다.

단지를 보내려고 세션 변수를 누르면 로그인합니다.과의 시작 페이지에서 첫 번째는지 여부를 확인하는 세션은 빈에서 이와 같은 페이지드 또는 Init 이벤트:

if(Session["UserID"] == null || Session["UserID"] == "")
{
    Response.Redirect("Login.aspx");
}

나를 위해 다음과 같은 방법을 작동합니다.내가 생각하는 경우에 오류가 있 후"FormsAuthentication.아웃()"문 SingOut 작동하지 않습니다.

public ActionResult SignOut()
    {
        if (Request.IsAuthenticated)
        {
            FormsAuthentication.SignOut();

            return Redirect("~/");
        }
        return View();
     }

당신은 당신 테스/이것을 보고 행동을 사용하여 IE?가능성 IE 제공하는 해당 페이지에서 캐시입니다.그것은 악명을 얻기 어렵 IE 플러시 그것은 캐시고,그래서 많은 경우에,심지어 한 후 로그아웃하의 url 을 입력하는 하나의"보안"페이지를 보여줄 것이 캐시되는 콘텐츠서기 전에.

(나는 본 적이 이 행동도 로그온할 때 다른 사용자로,그리고 IE 보여줍니다"에 오신 것을 환영합니다"바에서 최고의 페이지,오래 된 사용자의 사용자 이름을 사용합니다.요즘은 일반적으로 다시 업데이트됩니다,그러나 그것은 영구적이,그것은 여전히 캐시 문제입니다.)

고 세션이 있습니다.기()및 파괴하는 쿠키는 작업은 매우 좋다.내가 사용하여 mvc3 및 그것은 것처럼 보이는 문제가 발생합니다면 당신은 보호되는 페이지로,로그아웃하고 브라우저를 통해 역사입니다.큰 문제가되지 않습니다하지만 아직도니다.

하려고 가는 링크를 통해서 웹 앱을 방식으로 작동합니다 하지만입니다.

설정을 하지 않는 브라우저 캐시 방법이 있을 수 있습니다.

MVC 이것이 나를 위해:

        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();
            return Redirect(FormsAuthentication.GetRedirectUrl(User.Identity.Name, true));
        }

고 싶었을 추가 정보를 이해하는 데 도움이 되는 문제입니다.폼 인증할 수 있습 저장하기 위해 사용자 데이터 중 하나에서 쿠키거나,쿼리에는 문자열의 URL 이 있습니다.방법 귀하의 사이트를 지원하도록 구성할 수 있습니다.config 파일에 있습니다.

:

아웃 방법을 제거하는 양식-인증권 정보 에서 쿠키 또는 URL 는 경우 CookiesSupported false.

동시에, 그들은 말:

중 하나 HttpCookieMode 값을 나타내는지 여부를 구성된 응용 프로그램을 위해 쿠키를 사용하지 않는 형태를 인증합니다. 기본값은 usedeviceprofile 입.

마지막으로,에 관한 usedeviceprofile 입, 그들은 말:

는 경우 CookieMode 속성을 설정하 usedeviceprofile 입는, CookiesSupported 속성으면 true 를 반환 브라우저 현재 요청을 모두 지원합 쿠키 리다이렉션과 쿠키;그렇지 않으면,CookiesSupported 숙박 시설 false 를 반환합니다.

잇이 모두 함께,따라서 사용자의 브라우저의 기본 구성에서 발생할 수 있습 CookiesSupported 고 true, 즉,아웃 방법은 분명하지 않 티켓에서 쿠키입니다.이것은 카운터-직관적이고 나는 몰라 왜 이 방법이다-나는 예 아웃를 실제로 표시 사용자가 밑에 어떤 상황이다.

방법 중 하나를 만드는 아웃 그 자체로 작동 변경하는 것입 쿠키드"UseCookies"(즉쿠키가 필요하다)니다.config file:

<authentication mode="Forms">
  <forms loginUrl="~/Account/SignIn" cookieless="UseCookies"/>
</authentication>

에 따라 테스트를,이렇게 하는 아웃에 의해 작업에서 자신의 비용이트가 지금이 필요 쿠키가 적절하게 작동할 수 있습니다.

식 WIF 을 말하는 브라우저를 정리하면 쿠키를 wsignoutcleanup 메시지에서 STS url 과 일치하지 않는 이름으로의 응용 프로그램에서 IIS,그리고 내 말 구분.WIF 응답으로 녹색인지를 확인 것입니다 명령을 보내 쿠키를 삭제하는 브라우저입니다.

그래서,당신은 필요에 관심을 지불하는 경우 민감도의 url 이다.

예를 들어,ThinkTecture 정체성 서버에 저장한 url 의 방문 RPs 에서 하나 쿠키지만,그것은 모든 그들의 낮은 경우입니다.WIF 을 받을 것이 wsignoutcleanup 메시지로서 낮은 경우와 비교합니다 그것은 응용 프로그램과 함께 이름에서 IIS.일치하지 않을 경우,삭제합 쿠키가 없지만,보고서 확인하는 브라우저입니다.그래서,이에 대한 Id 서버를 쓰기 위해 필요한 모든 url 은 웹에서.config 고 모든 프로그램에서 IIS 에서 더 낮은 경우,기 위해서는 이러한 문제를 방지 할 수 있습니다.

또한 잊지 않을 허용하는 타사 쿠키는 브라우저에 있는 경우 외부에서 사용하는 애플리케이션의 하위 도메인의 STS,그렇지 않으면 브라우저를 삭제하지 않습니다 쿠키는 경우에도 WIF 그에게 말한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top