2009-05-17 2 views
4

웹 앱 게임이 있는데 게임 중에 사용자가 페이지 나 브라우저를 닫으면 자동으로 로그 아웃합니다.페이지 새로 고침과 페이지 닫기의 차이점을 알려주는 방법

window.onbeforeunload = function() { 
    // perform logout functions here 
} 

문제는, 사용자가 페이지를 새로 고치는 경우도 발생한다 : 나는 창문에 부착 된입니다 onbeforeunload 이벤트를 사용했습니다. 사용자가 전체 페이지를 완전히 닫았는지 아니면 그냥 새로 고치는지를 감지 할 수있는 방법이 있습니까?

답변

8

차이가 없습니다. 사용자를 자동으로 로그 아웃하려면 로그인 또는 세션 정보를 저장하는 쿠키에 만료를 설정해야합니다. 따라서 쿠키를 1 시간 동안 설정하면 쿠키가 삭제 된 이후 사용자가 본질적으로 로그 아웃됩니다. 사이트와 계속 상호 작용하는 동안이 자동 로그 아웃을 연기하려면 링크를 클릭하거나 AJAX 호출을 활성화하는 등의 작업을 수행 할 때마다 쿠키의 만료 기간을 재설정 할 수 있습니다. 즉, 로그인 한 시간이 1 시간이 아닌 1 시간 동안 사용하지 않으면 로그 아웃되고, 원하는 것보다 더 들리게됩니다.

쿠키의 만료 시간을 0으로 설정하면 세션이 끝난 후 만료됩니다. 일반적으로 사용자가 브라우저를 완전히 종료 할 때 발생합니다. 그것은 또 다른 선택 사항입니다.

2

그렇듯이 할 수 없습니다. 더군다나이 이벤트는 많은 브라우저에서 포기한 것으로 보입니다. 아마도 악성 스크립트로 인해 악성 코드가 남용되어 악용되었을 수 있습니다.

가능한 해결 방법은 Ajax 스크립트에 "phoning home"스크립트를 사용하는 것입니다. 잠시 동안 조용한 경우 사용자가 방금 사이트 (닫힌 페이지 또는 브라우저)를 포기했습니다.

2

onunload 이벤트가 서버에 요청을 보내면 세션이 n 초 만료됩니다 (n은 페이지 다시로드 요청이 발생할 최대 시간이므로 10 일). 그런 다음 사이트 점검 스크립트가 해당 이벤트가 예정되어 있는지 확인한 후 취소하십시오. 이것은 당신에게 당신이 원하는 것처럼 보이는 행동을 줄 것입니다.

하지만 그래, 단순히 세션이 만료되는 것이 좋습니다.

0

자바 스크립트에 onWindowClose와 같은 함수가 있어야한다고 생각하면 어떨까요?

PHP 솔루션에 대해서는 확실하지 않지만 PHP Connection Handling을 신속하게 살펴 보도록 권합니다. 특히 connection_aborted() 및 register_shutdown_function() 함수를 사용하는 것이 좋습니다.