2010-12-13 3 views
2

나는 사용자가 사용자 이름으로 로그인 할 수있게 해주는 간단한 채팅 클라이언트를 설정하고 SQL 데이터베이스에 작성한 메시지를 저장합니다. 3 초마다 데이터베이스는 단순히 모든 행을 인쇄합니다. 기본적으로 채팅 클라이언트입니다.사용자가 브라우저를 닫을 때 알아야하는 방법은 무엇입니까? 채팅 응용 프로그램

온라인 상태를 유지하고 싶습니다. 어떻게해야합니까? 누군가 브라우저를 종료 한 시점을 어떻게 알 수 있습니까?

는 지금은

$name = $_COOKIE["name"]; 

으로 사용자 이름을 당겨있어이 값이 비어있는 경우, 나는 그들이 왼쪽 알고있다. 하지만 일단 떠난 후에는 사용자 이름이 무엇인지 알기에는 너무 늦었으므로 정확하게 떠난 사람을 추적 할 수는 없습니다.

아이디어가 있으십니까? 나는 php, javascript 및 html에 상당히 익숙하다. 그래서 염두에 두라.

+0

ehmad1 @ 방법! 엄지 손가락! – Mike

답변

1

넣어 온라인 사용자 .. :

window.setInterval(function() { 
    $.ajax({  
     url: _URL_ENGINE + "/updateLastSeen/?userid=" + userID, 
     success: function(data) { 

     } 
    }); 
}, 2000); // 2000 means 2 seconds 

지금 온라인 플레이어의 목록을 조회 할 수 u는

select * from players WHERE lastSeen > DATE_SUB(NOW(), interval 40 SECOND) 

희망처럼를 조회 할 수 있습니다이

0

onbeforeunload 이벤트를 사용한다.

+0

heres a sample http://www.4guysfromrolla.com/demos/OnBeforeUnloadDemo1.htm – basarat

+4

이것은 AJAX 요청을 보낼 때 Ajax 요청을 보내면 처리되지 않을 수도 있습니다. – fire

3

AJAX를 사용하여 X 초마다 채팅 메시지를 가져 오는 것으로 가정하면 해당 사용자의 현재 시간 기록으로 사용자 테이블을 업데이트하십시오. 그런 다음 타임 스탬프가있는 사람은 10 초 이상 지나면 페이지를 벗어 났음을 알게됩니다.

+0

up vote! 나는 또한 hv 몇 가지 코드 샘플을 추가했습니다. – ehmad11

5

사용자가 창을 닫으 려 할 때 브라우저가 대개 JS 완료를 기다리지 않기 때문에 누군가가 창을 닫을 때 마지막 요청을 서버에 보내기가 어렵습니다 (onbeforeunload의 경우).

이와 같은 상황에 직면 할 때마다 onbeforeunload을 사용하여 최종 요청을 보내지 만 (브라우저 윈도우가 닫히기 전에 빨리 완료되고 대개 완료되기도 함) 시간 제한 기능도 구현하는 경향이 있습니다. 제한 시간 기능은 다음과 같이 작동합니다.

사용자가 서버에 무언가를 보낼 때마다 서버는이를 '아직 있음'으로 인식합니다. 동시에 클라이언트는 예를 들어 45 초의 타이머를 설정합니다. 사용자가 45 초 동안 아무것도 입력하지 않으면 클라이언트는 연결 상태를 유지하기 위해 '아직 살아 있음'신호를 보냅니다.

이제, 서버는 마지막에 '살아'신호를 보내지 않은 사용자를 제거하는 (15 초 느린 연결 마진을 허용 따라서 45/60 초)을 removeInactive() 루틴 60 초마다 실행해야 60 초.

이 시스템은 지금까지 저에게 잘 돌아갔습니다. 스스로 해결할 수 있습니다. 같이가 someting를 만들 수

Ajax 호출이 필드 아약스 호출을 몇 초마다는 'lastSeen'업데이트를 같은 이름의 필드가하는 테이블에

관련 문제