2009-11-04 8 views
2

예가 있는데 브라우저 창을 닫을 때 세션을 종료해야합니다. page_unload()가 작동하지 않습니다. 예제는 다음과 같습니다. 부모 창과 창이 있습니다. 사용자가 자식 창을 닫을 때 세션을 삭제해야합니다. 제발 좀 도와주세요.사용자가 브라우저 창을 닫을 때를 감지하고 싶습니까?

+0

중복 인 경우 부모가 초점 확인을받을 때 http://stackoverflow.com/ 자식 창을 확인하기 위해 onfocus 및 필요 부모 윈도우의 모든 자식 창의 참조가 질문/920042/kill-server-side-session-on-browser-window-close-closed http://stackoverflow.com/questions/287022/closing-the-browser-should-actually-clear-the-session- variables-an-asp-net-sessio –

답변

5

로그 아웃 페이지에 다시 게시하는 window.onbeforeunload 처리기로이 작업을 수행 할 수 있습니다. 클라이언트 측 스크립트는 서버 측 응용 프로그램에 AJAX 하트 비트를 전송하는 경우

function CloseSession() 
{ 
    location.href = 'SignOut.aspx'; 
} 
window.onbeforeunload = CloseSession; 

가 중복 질문입니다 .. 여기

Closing the browser should actually clear the session variables an ASP.net session id

https://stackoverflow.com/questions/920042/kill-server-side-session-on-browser-window-close-closed

+1

사전로드가 실행되지 않는다고 보장하지 않습니다. –

1

불행히도 이것은 불가능합니다. 그들이 할 수 있다고 주장하는 웹에서 예제를 찾을 수 있지만 때로는 매우 미묘한 결함이 있습니다.

0

javascript를 통해 닫는 브라우저를 감지하는 일관된 방법이 없습니다. 세션 수가 너무 많아서 걱정할 경우 서버의 세션 시간 초과를 줄이십시오. 그렇게 할 경우 작업을 잃지 않기 위해 활성 상태로 유지해야한다고 사용자에게 알리고 싶을 수도 있습니다.

10

이것은 일반적인 웹 HTTP 프로토콜에서 제공되는 것이 아닙니다. 브라우저가 닫힐 때를 확실히 알 수있는 실제 방법은 없습니다. 당신은 오직 "알지"못합니다. 어떤 수준의 확실성을 얻으려면 못생긴 해킹을 던져야합니다. 그런 다음에도 많은 경우에 실패하거나 부작용을 유발할 수 있습니다.

정상적인 해결 방법은 일종의 "하트 비트"를 설정하기 위해 브라우저에서 서버로 간격을두고 ajax 요청을 보내는 것입니다. 하트 비트가 멈 추면 브라우저가 닫히고 세션을 종료합니다. 그러나 다시 : 이것은 끔찍한 해킹입니다. 이 경우 주요 문제는 서버와 클라이언트가 동기화되지 않거나 자바 스크립트 오류가 발생하면 실패한 하트 비트에 대해 오탐 (false positive)을 얻는 것이 쉽고 세션 자체가 만료되지 않는 부작용이 있다는 것입니다.

+4

+1 : 유일한 예외는 서버와 계속 통신하는 일종의 인라인 Java (또는 유사한) 애플릿을 실행하고 있으며 작동하는 유일한 이유는 정규 HTML 채널 외부에서 실행되기 때문입니다. HTML은 상태 저장 프로토콜이 아니며 javascript를 사용하여 그렇게하려고하는 방법은 최선의 해킹입니다. – Satanicpuppy

0

밖으로 CHK, 당신은 수도 누락 된 비트를 사용하여 세션을 닫습니다.

0

당신은 당신이 그래서 아이가 여부

관련 문제