2011-05-09 3 views
2

양식 인증을 사용하는 asp 웹 응용 프로그램이 있습니다. asp.net 멤버십 공급자를 사용하지 않고 사용자 지정 인증을 만들고 있습니다. 따라서 사용자가 로그인 할 때, 나는 그를 위해 티켓과 쿠키를 만들고 사용자가 로그 아웃 할 때 그를 삭제합니다. 사용자가 브라우저의 오른쪽 상단에있는 닫기 버튼을 클릭하면 문제가 발생합니다. 아시다시피 이것은 클라이언트 측 이벤트이고 실행중인 서버 측 이벤트는 없습니다.
내 질문 :
티켓과 쿠키를 제거하기 위해 사용자가 닫기 버튼을 클릭하면 어떻게해야합니까?asp.net 응용 프로그램 인증 문제

답변

0

비 지속 쿠키를 사용해야합니다. 이 메서드의 두 번째 인수에 false를 전달하여이 작업을 수행합니다. http://msdn.microsoft.com/en-us/library/twk5762b.aspx

+0

쿠키 이외에도 티켓도 제거해야한다는 질문이 있습니다. 솔루션이 해당 시나리오를 처리하지 않습니다. – Nikhil

+0

티켓이 쿠키에 있다고 가정합니다. 이것이 양식 인증이 작동하는 방법입니다. 실제로 폼 인증을 사용하고 있고 백엔드 메커니즘 만 구현 한 경우 (즉, FormsAuthentication 클래스를 사용하고있는 경우) 이는 전환 할 단 하나의 인수 일뿐입니다. 그가 FormsAuthentication 클래스를 사용하지 않는다면 나는 틀린 일을 할 것이라고 생각합니다 :) – Stilgar

+1

@Ghyath Serhal은 플래그, 파일, 데이터베이스 테이블의 레코드 또는 "세션"이 어떻게 든 알 수있는 모든 것을 "티켓"이라고 부릅니다. 이 "티켓"은 세션이 만료되는 즉시 삭제되거나 무효화됩니다. 내가 잘못 ? – Larry

0

"onbeforeunload"DOM 이벤트에 연결할 수 있습니다. 접근 방식의 몇은 ('fieldID가') __doPostBack를 클라이언트 측에서

  1. 이 숨겨진 필드의 값을 설정 걸릴 호출 할 수 있습니다. 이 필드의 값인 chagned 이벤트의 서버 측 이벤트 핸들러에서 티켓과 인증 토큰을 제거하십시오. 이걸 아약스 게시판으로 만들 수 있습니다. 사용자가 브라우저를 닫더라도 웹 서버가 공격을 받았을지라도 토큰을 제거한다는 아이디어가 있습니다.

  2. 같은 이벤트 처리기에서 웹 서비스 호출을 실행하여 인증 토큰을 제거합니다.

+1

onbeforeunload 이벤트 처리기를 사용하면 하이퍼 링크를 클릭 할 때마다 이벤트 처리기를 실행하는 코드로 연결되는 경우가 있으므로 IE에는주의해야합니다. 이 문제를 해결하려면 if ($ .browser.msie) $ ('a')와 같이 할 수 있습니다. live ('click', function() { var a = 1; document.ignoreUnload = document. ignoreUnload || $ .inArray (this.id, Sys.WebForms.PageRequestManager.getInstance()._asyncPostBackControlClientIDs)> -1; }); – Nikhil

+0

쿠키를 제거하기 위해이 작업을 수행 하시겠습니까? – Stilgar

+0

아이디어는 단순히 브라우저 closign 이벤트를 트랩하고 서버에서 필요한 모든 처리를 위해 서버 측 호출을 시작하는 것입니다. 정말 아무것도 될 수 있습니다. 그래서 나는 일반적인 종류의 해결책을 제시했다. – Nikhil

0

서비스 세션에서 session.Abandon() 및 session_end 이벤트를 사용하여 사용자 세션이 만료되거나 종료되는 즉시 티켓을 삭제한다고 가정합니다.

나는 지금까지 ASP.NET 세션 만료 메커니즘을 사용하여 세션이 만료 될 때까지 기다렸습니다. 외관상으로는 의지하고 싶지 않기 때문에 "windows close"이벤트를 어떻게 든 잡아서 서버에 신호를 보내야합니다.

This link이 작업 방법에 대한 예제가 도움이 될 수 있습니다.

+0

Ok. 경찰은 downvoting 할 때 의견을 추가하고 있습니다. 그래서 ... 의견을 기다리고 있습니다. – Larry

+0

쿠키를 영구적으로 작성하지 않는 한 브라우저를 닫으면 쿠키가 자동으로 삭제됩니다. 클라이언트 또는 서버 측에서 어떤 이벤트도 필요 없습니다. 그것은 쿠키가 "브라우저를 닫은 후에도 보관해야합니다"라는 의미입니다. 원하는 동작이 브라우저를 닫을 때 쿠키를 제거하는 것이 아닌 경우 영구적으로 만들거나 영구 쿠키를 만듭니다. – Stilgar

+0

비 영구 쿠키가 적절합니다. 어쨌든, @Ghyath Serhal 아이디어는 타임 아웃 메커니즘에 의존하지 않고 서버 측에서 세션을 닫는 것입니다. 여기서 문제는 클라이언트 측의 쿠키에 어떤 일이 생기더라도 지속성 여부와 상관없이 클라이언트 측 창이 닫힐 때 서버 측의 세션을 닫아야한다는 것입니다. 리소스와 물건이 할당되어 릴리스되어야하기 때문에 서버 측에서 세션을 닫는 것이 중요합니다. – Larry

관련 문제