2012-01-12 5 views
0

그래서 저는 채팅 앱과 비슷한 것을 쓰고있어 사용자가 더 이상 활동하지 않을 때를 감지 할 방법이 필요합니다. 본질적으로 나는 다른 사용자가 응용 프로그램의 사용자가 페이지를 떠났거나 브라우저를 닫았을 때 로그 아웃되었음을 알릴 필요가 있습니다. 서버 측 스크립트가 "15 분 안에 사용자 X의 요청을받지 못했기 때문에 이것을 알아낼 수있는 방법이 없으므로 그가 밖으로 나왔다고 생각할 것입니까?"PHP에서 채팅 스크립트의 비활성 세션을 어떻게 감지합니까?

+0

논리는 다음과 같습니다. http://stackoverflow.com/questions/8806876/1-1-chat-system-using-php-mysql/8807233#8807233 –

+0

이 게시물 참조 : http://stackoverflow.com/questions/887919/user-is-log-in-log-in-php –

답변

0

주석의 링크에서 말한 것처럼 AJAX를 사용해야합니다. (내 생각에) 이렇게하는 가장 쉬운 방법은 여기, JQuery와 함께있는 아래의 예이다 : 당신의 sessioncheck.php 파일에 지금

$(document).ready(function(){ 
    window.setInterval(function(){ 
     initiateSessionCheck(); 
    5000); 

    function initiateSessionCheck() { 
     $.ajax({ 
      type : 'POST', 
      url : 'sessioncheck.php', 
      success : function(data){ 
       //success 
      }, 
      error : function(XMLHttpRequest, textStatus, errorThrown) { 
       //error do something they are no longer active 
      } 
     }); 

    } 
}); 

당신이 그건이

session_start(); 

if (!$_SESSION) { //you could check a session variable explicitly like $_SESSION['user_id'] != '' 
    $return['error'] = true; 
} else { 
    $return['error'] = false; 
} 

echo json_encode($return); 

을하고 싶은 것은 기본하지만 트릭을해야합니다!

+0

이 세션의 다른 사람의 상태가 아닌 세션 상태를 확인하는 것으로 보입니다. 의미하는 것은 당신과 내가 이야기하고 떠날 때, 나의 세션은 끝날 것이지만, 당신은 그것을 어떻게 인식 할 것입니까? 서버가 닫혀있는 세션을 어떻게 인식합니까? php는 나와 나와 세션을 공유하지 않습니다. –

+0

기다려요. 제가 생각하기에 세션 키에 핑할 때마다 "사용자 X가 '타임 스탬프'에 핑 (ping) 된 DB를 쓸 것입니다. 그러면 활성 사용자 목록은 마지막 ping ...에 의해 결정됩니다. 맞습니까? –

+0

그래, 같은 기능을 사용하여 매 x 초마다 특정 테이블에 날짜와 시간을 쓸 수 있습니다. 그런 다음 동일한 테이블을 검사하는 cron을 설정하고 날짜 시간 소인에서 x 시간이 경과하면 사용자가 사라졌으며 활성 세션이 없다고 가정 할 수 있습니다 (이들은 ajax 호출을 중단하기 위해 페이지를 떠나야 할 것입니다). 세션이 끝나면 active_session이라는 사용자 테이블의 열에 쓸 수 있습니다 (예를 들어). 활성 상태가 아니면 0으로 설정하십시오. 로그인 할 때 1로 설정되어 있는지 확인하십시오. 그런 다음 다른 사용자에 대한 동일한 AJAX 호출에서 날짜 시간 소인을 작성하면 –

관련 문제