2012-02-10 2 views
3

가능한 중복 :
How can I destroy sessions if user closes the browser window or navigates away from page in php?PHP Javascript? 사용자가 페이지 나 브라우저를 닫을 때 무언가를

은 기본적으로 내 MySQL의 DB를 업데이트하여 내 사용자에게 "오프라인"으로 설정하고 아마도 자신의 세션 때를 종료 할 브라우저 나 페이지를 닫습니다.

나는 이것을하는 웹 사이트를 보았다.

누구나 그 방법을 설명하고 예제를 게시 할 수 있습니까?

고맙습니다.

답변

0

window.onunload을 사용하면 사용자가 페이지를 떠날 때/닫을 때 AJAX 호출을 시작할 수 있습니다.

window.onunload = function(){ 
    // AJAX call to mark user "offline" 
} 

편집 : 링크를 클릭 할 때 변수를 설정하면 사용자가 페이지를 떠날 때만 실행되도록 설정하는 것이 좋습니다. jQuery를 사용

, 다음과 같이 수행 할 수 있습니다

$('a').click(function(){ // Run for all links 
    $('body').data('linkClicked', true); // Set global variable 
}); 

$(window).unload(function(){ // jQuery version of window.onunload 
    if(!$('body').data('linkClicked')){ // Check global variable 
     $.ajax({ 
     url: 'url', 
     data: {some: data}, 
     async: false // this locks the browser, but it may be needed to make 
        // sure the ajax call runs before the tab is closed 
     }); 
    } 
}); 
+0

그래도 작동하지만 사미는 페이지 변경시 발생한다고 생각합니다. 따라서 사용자가 사이트의 다른 섹션에 대한 링크를 클릭하면 해고 될 것입니다. – Henesnarfel

+0

모든 페이지가 변경된 후이 트리거가 실행되지 않습니까? –

+0

@SamDzHamida 꽤 확실한 – Henesnarfel

0

나는이 작업을 수행하기 위해 jQuery를 사용합니다 .. 이런 걸하고 window.onunload를 사용하여 위에서 언급 한 바와 같이 :

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success, 
    dataType: dataType 
}); 
2

페이지가 닫히거나 탐색 될 때 뭔가 할 수있는 유일한 방법은 이벤트 처리기를 unload 이벤트에 연결하는 것입니다 (Rocket에서 제안했듯이). 그러나 많은 일들이 그것을 막을 수 있기 때문에 당신은이 사건을 의지해서는 안됩니다. 브라우저가 리소스를 다른 작업에 집중할 수 있도록 중지 할 수 있습니다. 연결이 끊어 지거나 브라우저가 종료 될 수 있습니다.

사용자와 세션을 추적하는 가장 신뢰할 수있는 방법은 지정된 간격으로 서버에 keepAlive 메시지를 보냅니다. 그런 다음 사용자가 주어진 타임 스탬프와 keepAlive 메시지의 간격 사이에 언젠가 떠났음을 알 수 있습니다.

서버에서 잠시 동안 살아 있지 않은 세션을 탐색하고 필요한 모든 작업을 수행 할 수 있습니다.

그러나 멋진 "로그 오프"효과 만 만들어야하는 경우에는이 방법이 필요하지 않습니다.

관련 문제