2010-02-03 3 views
2

환경에 걸쳐 테이블에 저장된 페이지 새로 고침 : PHP/MySQL은/​​jQuery를
JQuery와 - 새 데이터가 브라우저 세션

나는 페이지 (예 : index.php를) 갱신하려는

새로운 데이터 저장소를 (예 : new_entry_table)을 1 분마다 확인합니다. 같은 페이지가 새로운 데이터가 생길 때마다 새로 고침을 받아야하는 많은 컴퓨터 (PC 브라우저)에서 열립니다.

setInterval(function(){ 
$.post("new_data_check.php", function(data) { 
    if(data > 0){ 
     $("#container").fadeOut('fast').load(location.reload()); 
    } 
    }); 
    return false; 
},60000); 

new_data_check.php :
: JQuery와 데이터베이스를 체크하여

난 다음 시도 test_db 새로운 데이터를 검사 어디 newdata_field = 0;
: 새로운 데이터가있는 경우 echo "1"; 그리고 newdata_field = 1을 업데이트하십시오. 끊임없이 멈추는 페이지 새로 고침.
: else echo "0";
: 어떤 트리거가 그것지고 새로 고침 단 하나 개의 열린 세션이 열려있는 다른 세션을 container.But 새로 고쳐집니다 발생하면 그냥 트리거를

그래서 위의 jQuery 코드 검사가 트리거마다 1 분 new_data_check.php (다른 브라우저 또는 다른 PC)에서 새로 고침되지 않습니다.

더 좋은 방법을 제안하십시오. 감사.

답변

3

new_data_check.php 파일은 독립적으로 페이지를 보는 모든 사용자를 추적해야합니다.

되지 않은 경우,이 상황이 발생합니다

  • 사용자 1과 사용자 2는 두 사이트에 기록됩니다.
  • 사용자 1은 사용자 1의 5 초 전에 새 데이터가 있는지 확인합니다.
  • 사용자 1이 사용자의 요청을 완료합니다. 서버는 new_data 비트를 지 웁니다.
  • 사용자 2의 요청이 5 초 후에 도착합니다. 요청을 무시하지만, 사용자 1은 new_data 필드를 0으로 설정했습니다. 사용자 데이터는 부실하지만 사용자 1이 효과적으로 선택했습니다.

서버는 IP 주소를 사용하여 서버를 확인하지 않는 한 사용자를 식별 할 수있는 정보를 제공하지 않습니다. 그렇다면 소규모 네트워크 뒤에있는 모든 사람들이 동일한 외부 IP 주소를 가질 가능성이 있음을 기억하십시오. 그래서 그것은 사무실에서 사람들을 구분할 수 없습니다.

당신이 할 수있는 일은 각 세션마다 일종의 고유 해시를 생성하고이를 브라우저에 전달하는 것입니다. 자바 스크립트는 다음 동일한 토큰을 PHP 스크립트를 제공 할 수 있습니다.

특별한 비트가없는 또 다른 해결책은 요청과 함께 타임 스탬프를 전달하는 것입니다. 본질적으로 고객은 "내 최신 데이터가 오후 9시 21 분 53 초에 도착했습니다."라고 말합니다. 그러면 서버는 "내 가장 최근 데이터가 그 전에 생성되었으므로 여전히 좋은 상태입니다."또는 " 오후 9시 22 분 53 초에 작성되거나 수정 된 것, 다운로드해야합니다. "

그 방법을 사용하면 누가 누군지 걱정할 필요가 없습니다. 대신, 당신은 staleness를 검사하는 데이터에 수정/생성 시간을 가져야합니다.또한 클라이언트 시계가 올바르게 동기화되었는지 확인해야합니다. 클라이언트 날짜 및 시간 정보를 신뢰하지 않는 것이 좋습니다. new_data_check.php를 활용하여 후속 요청에서 전달할 수있는 타임 스탬프를 스크립트에 제공 할 수 있습니다.

+0

Koobz에게 답장을 보내 주셔서 감사합니다. 당신의 해결책을 시도하고 답장을 보내십시오. – Webrsk

관련 문제