2011-08-01 5 views
0

이전에 여러 번 묻고 답한 적이 있습니다. 답변을 찾기 전에 모든 게시물을 살펴본 결과 이 다시이되었다고 생각합니다.ASP.Net 로그 아웃이 예상대로 작동하지 않음

사용자가 페이지에 로그인하고 URL 복사본을 가져 와서 로그 아웃 한 다음 다시 브라우저에 붙여 넣으면 브라우저가 로그인으로 리디렉션되기 전에 이전에 매우 간헐적으로 방문한 페이지에 액세스 할 수 있습니다 한 번 더. 이 짧은 창에서 마우스로 충분히 빠르며 버튼이나 다른 컨트롤을 클릭 할 수 있으면 사이트에 다시 로그인 한 채 아무 질문도하지 않습니다.

캐싱을 피하기 위해 성공하지 못하도록 각 Page_Load 이벤트에 주제에 대한 다른 스레드의 다음 코드 제안을 포함 시키려고했습니다.

protected void Page_Load(object sender, EventArgs e) 
    { 
     FormsAuthentication.SignOut(); 
     HttpContext.Current.Session.Clear(); 
     HttpContext.Current.Session.Abandon(); 
     Response.Redirect("~/Account/Login.aspx"); 
    } 

내가 Server.Transfer() 대신 Response.Redirect()을 사용해야 다음과 같이 logout.aspx에서

private void ExpirePageCache() 
    { 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     Response.Cache.SetExpires(DateTime.Now - new TimeSpan(1, 0, 0)); 
     Response.Cache.SetLastModified(DateTime.Now); 
     Response.Cache.SetAllowResponseInBrowserHistory(false); 
    } 

코드는?

브라우저 기록을 프로그래밍 방식으로 지울 수 없으므로 어딘가에 읽었습니다. 조금만 붙어 있습니다. 누구나 단서가 있으십니까?

답변

0

예, 해당 코드 줄은 logout.aspx 페이지의 Page_Load 이벤트에 이미 포함되어 있습니다. 그것은 실행되는 코드의 첫 번째 줄입니다 ...

0

다른 뭔가가 의심됩니다.

response.redirect를 호출하면 생성 된 페이지 내용이 클라이언트로 전송되지 않습니다. ASP는 버퍼링을 사용하므로 페이지를 생성 할 때 버퍼가 클라이언트에 전송되는 시점까지 버퍼링됩니다. 이렇게하면 리디렉션 응답을 보내는 것과 같이 마지막 순간까지 바로 변경할 수 있습니다. 그래서 그것은 당신의 문제가 아닙니다.

출력 캐시를 사용하고 있습니까, 아니면 양식 인증 티켓을 지속적으로 설정하고 있습니까? 브라우저에 콘텐츠의 캐시 된 사본이있는 경우 캐시를 사용하도록 설계되었으므로 서버에 도달하지 않고 브라우저에 표시됩니다. 서버에 충돌 한 순간 쿠키가 유효하지 않은 경우 서버는 새 티켓을 얻기 위해 사용자를 다른 곳으로 리디렉션해야합니다. 그것이 그렇게하지 않으면 어떻게 든 유효한 티켓을 찾는 것입니다.

트래픽을 모니터링하기 위해 피들러를 사용할 수 있습니다. Fiddler를 사용하여 수동으로 요청을 보내고 세션 쿠키 &을 제거하여 새 브라우저 세션을 모방 할 수 있습니다.

사이먼

관련 문제