2010-12-02 5 views

답변

4

클라이언트 측 스크립트 :

< body onbeforeunload="window.open('http://www.website.com/browserclosed.aspx','mywindow','width=1,height=1');"> 

서버 측 스크립트 (browserclosed.aspx) :

// page_load 

int userId = Convert.ToInt32(request.session("userId")); 
ReportBrowserClosed(userId); 
// Do what you want in ReportBrowserclosed() method 
9

짧은 대답 : http는 상태가 없으므로 직접 처리 할 수 ​​없습니다. 어쩌면 AJAX 고음질 풀링, 세션 타임 아웃 감지 및 기타 트릭을 사용할 수 있습니다.

자세한 설명 및 아이디어는 this question을 참조하십시오. 이것은 자바 기반이지만 아이디어는 언어에 구애받지 않습니다.

0

가장 먼저 떠오르는 것은 언로드 이벤트를 연결하고 브라우저가 사이트에서 멀리 탐색 한 것을 다시 비동기 적으로 게시한다는 것입니다 (창을 닫음). 그러나 HTTP가 stateless 웹 사이트를 만드는 데 사용되는 방식으로는이 방법이 불가능합니다. 신뢰할 수있는 사용자 연결 추적 방법이 없습니다.

여러 세션을 어떻게 처리할까요? 동일한 사이트가 여러 탭, 여러 탭 또는 창에서 열려 있고 하나만 제외하고 모두 닫힌 경우 어떻게 연결되어 있는지 어떻게 알 수 있습니까? 그리고 그것의 재미를 위해, 나의 브라우저가 사이 어딘가에서 추락했다고 말하십시오.

문제는 문제를 해결할 수있는 무언가를 디자인 할 수 있다는 것입니다. 그러나 HTTP에는 연결을위한 내장 된 제어 메커니즘이 없으므로 절대로 신뢰할 수 없습니다.

나는이 질문에 후속 질문으로 답해야합니다. 브라우저 창이 닫힐 때를 알 필요가있는 이유는 무엇입니까?

일부 리소스를 정리해야 할 경우보다 안정적으로 사용할 수있는 ASP.NET에 의해 촉진되는 두 가지 서버 쪽 이벤트가 있습니다. 그 값은 Session_End 또는 Application_End입니다.

+0

나는 OP에 대해 대답 할 수 있지만,이 작업을 수행하는 하나의 공통 이유가를 중지하는 것입니다 사용자가 브라우저를 포기하고 닫을 때 장기 실행 작업 (쿼리, 보고서 생성 등). – Gabe

0

아주 분명한 질문은 왜 이것을 필요로합니까? 로그 아웃 시간 또는 종료 시간을 저장 하시겠습니까? 그렇다면 세션 타임 아웃을 잡는 것이 좋습니다. 다른 페이지를 리디렉션하고 자바 스크립트의 페이지 언로드 이벤트를 잡아 내고 싶습니까?

관련 문제