문제

ASP.NET 웹 앱의 사용자를위한 명시적인 로그 아웃 버튼이 필요합니다. 기본 인증 (SSL)과 함께 IIS6을 사용하고 있습니다. 다른 웹 페이지로 리디렉션 할 수 있지만 브라우저는 세션을 살아 유지합니다. 나는 Googled를 통해 활성 X 컨트롤이 IIS와 통신하고 세션을 죽일 수 있도록함으로써이를 수행 할 수있는 방법을 찾았습니다. 양식 인증을 허용하지 않는 제한된 환경에 있으며 활성 X 컨트롤도 금지되지 않습니다. 다른 사람 이이 요구 사항을 가지고 있었고 어떻게 처리 했습니까?

좋아, 그게 내가 두려워했던거야. 나는 그물에서 비슷한 답변을 보았고 누군가가 그것을 할 수있는 방법을 갖기를 바랐다. 그래도 시간을 내 주셔서 감사합니다. history.back ()와 같은 뒤로 버튼을 방지하기 위해 JavaScript를 사용할 수 있다고 생각합니다.

도움이 되었습니까?

해결책

나는 이것으로 며칠 동안 어려움을 겪고 있었다.

IE 특정 사용 'document.execCommand('ClearAuthenticationCache');'모든 사람에게 좋은 옵션이 아닙니다. 1) 모든 자격 증명을 플러시합니다. 예를 들어 사용자는 예를 들어 Gmail 또는 현재 인증 된 다른 웹 사이트에서 로그 아웃 할 것입니다.

Session.Abandon ()을 사용한 다음 Default.aspx로 리디렉션했습니다. 이것만으로는 충분하지 않습니다. 브라우저에 요청 된 요청이 승인되지 않았 음을 명시 적으로 알려야합니다. 다음과 같은 것을 사용 하여이 작업을 수행 할 수 있습니다.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
response.AddHeader("WWW-Authenticate", "BASIC Realm=my application name");
resp.End();

이렇게하면 다음이 발생합니다. 사용자는 로그 아웃 버튼을 클릭합니다. ==> 기본 로그인 창이됩니다. 그러나 : 탈출을 누르고 (로그인 대화 상자가 사라지면) 새로 고침을 누르면 브라우저는 자동으로 자격 증명을 다시 보냅니다.

이것을 해결하는 요령은 항상 독특한 '영역'을 뱉어내는 것입니다.. 그런 다음 브라우저는 위에서 설명한 사례에서 자격 증명을 재현하지 않습니다. 나는 현재 날짜와 시간을 뱉어 내기로 결정했다.

response.StatusCode = 401;
response.Status = "401 Unauthorized";
string realm = "my application name";                
response.AddHeader("WWW-Authenticate", string.Format(@"BASIC Realm={0} ({1})", realm, DateTimeUtils.ConvertToUIDateTime(DateTime.Now)));
resp.End();

당신이해야 할 또 다른 일은 브라우저에 페이지를 캐시하지 말라고 지시하는 것입니다.

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.MinValue);
Response.Cache.SetNoStore();

이 모든 것들이 제자리에 있으면 (나에게) IE에서 작동하지만, 지금까지 사용자가 탈출을 처음 누르면 (기본 로그인 대화 상자를 숨긴다) (F5를 숨기면) 사용자가 Firefox를 기록하는 것을 방지 할 수 없었습니다. ) 또는 브라우저 백 버튼.

다른 팁

그만큼 Session.Abandon 메소드는 세션 객체에 저장된 모든 객체를 파괴하고 리소스를 출시합니다. 포기 방법을 명시 적으로 호출하지 않으면 서버는 세션이 시간을 초과 할 때 이러한 객체를 파괴합니다.

버튼 클릭에 응답하여 Session.Abandon에 전화 해 보셨습니까?

편집하다:

이것은 고전적인 뒤로 버튼 문제 인 것 같습니다.

뒤로 버튼에 대해 할 수있는 일은 거의 없습니다. 사용자가 새 창에서 현재 페이지를 열었다고 생각한 다음 로그 아웃 버튼을 클릭하면 해당 페이지가 로그 아웃되는 것처럼 보이지만 다른 창의 내용에 즉시 영향을 미치지는 않습니다.

그들이 그 창의 어딘가에서 탐색하려고 할 때만 세션이 사라 졌다는 것이 분명해집니다.

많은 브라우저는 유사한 (동일하지는 않지만) 뒤로 버튼을 구현합니다. 이전 페이지로 돌아가는 것이 반드시 HTML/HTTP 관점에 대한 탐색 일 필요는 없습니다.

이것은 IE6 이상에서 작동하는이 문제에 대한 해결책입니다.

<asp:LinkButton ID="LinkButton1" runat="server" OnClientClick="logout();">LinkButton</asp:LinkButton>


<script>

    function logout()
    {
    document.execCommand("ClearAuthenticationCache",false);
    }
 </script>

이것을 찾았습니다http://msdn.microsoft.com/en-us/library/bb250510%28vs.85%29.aspx

웹 팀은 간단히 말해서 자격 증명을 부탁드립니다

Q : Jerry B.는 다음과 같이 썼습니다. "사용자가 자신의 요청을 검증하고 처리 한 후 이제 그를 무효화하고 싶습니다.이 기계가 누군가가 걸을 수있는 열린 환경에 있다고 가정하면 각각 새로운 도전을 던지고 싶습니다. 사용자가 웹에서 특정 모듈에 액세스 할 시간입니다. "

A : 이것은 Internet Explorer 팀의 자주 요청되는 기능이며 거기의 좋은 사람들은 Internet Explorer 6.0 SP1에서이를 수행 할 수있는 방법을 제공했습니다. 문서의 execcommand 메소드를 호출하기 만하면 다음과 같은 명령 매개 변수로 CleareAuthenticationCache를 전달하기 만하면됩니다.

document.execCommand("ClearAuthenticationCache");

이 명령은 캐시의 모든 자격 증명을 플러시하여 사용자가 인증이 필요한 리소스를 요청하면 인증 프롬프트가 다시 발생합니다.

이것을 로그 아웃 링크 버튼에 넣고 IE6 SP1 이상에서 작동합니다.

OnClientClick="document.execCommand('ClearAuthenticationCache');"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top