2012-07-02 2 views
0

jQuery의 비동기를 사용하여 PHP 스크립트를 호출하는 웹 사이트를 프로그래밍하고 있습니다.스크립트 호출을위한 PHP 타이머 재설정

  • 내가 성공적으로
  • 확인할 것이다 호출되는 PHP 스크립트에서 타이머를 설정했을 스크립트 호출을 트리거 버튼을 비활성화 : 전화를 두 번 스크립트를 방지하기 위해 나는이 일을하고 싶습니다 이 1 초 미만 전에 동일한 사용자에 의해 호출, 그렇다면,

먼저 종료되었는지 여부를 나는이 상대적으로 쉬울 것이라고 생각하고 다음 코드를 내놓았다 :

if(!isset($_SESSION['time'])) $_SESSION['time']=time(); 
else if(time()-$_SESSION['time']<=1){ 
    //If less than one second ago, timer reset 
    $_SESSION['time']=time(); 
    exit; 
} 

처음에는 문제가 없었지만 나중에 다시 확인해야 할 때 매우 오래된 시간이 세션에 저장되어 여전히 남아 있으므로 스크립트는 사용자가 원하는대로 자주 호출 할 수 있습니다.

해결 방법이 있습니까? 고맙습니다!

찰스

편집

내 질문은 아마도 this의 중복이 될 수 - 당신은 아마 두 번째 대답에서 모든 값을 볼 수 있습니까?

는 솔루션이이 솔루션

을 발견

if(!isset($_SESSION['time']) || ($_SESSION['time'] + 1 < time())){ 
    $_SESSION['time'] = time(); 
}else if(time()-$_SESSION['time']<=1){ 
    //Timer reset 
    $_SESSION['time']=time(); 
    exit; 
} 

답변

1

이 설정되어 있지만 X 초보다 오래된 경우 간단한 수정 시간 값을 덮어 쓰기하는 것입니다 :

if(!isset($_SESSION['time']) || ($_SESSION['time'] + 30 < time())) { 
    $_SESSION['time'] = time(); 
} 

30 값을 원하는 제한 시간으로 변경하십시오.

+0

안녕하세요, Tim까지 감사드립니다! 그러나이 X 초 동안 사용자가 스크립트를 원하는만큼 보낼 수 있다는 의미입니다. 맞습니까? – weltschmerz

+0

자, 해결책을 찾았습니다. 질문 편집을 참조하십시오. 고맙습니다! – weltschmerz

0

아마도이 문제를 약간 다르게 공격하고 더 이상 유효하지 않은 AJAX 호출을 중단합니다.

예를 들어 사용자가 두 번 버튼을 두 번 클릭하면 두 번째 클릭으로 첫 번째 클릭의 Ajax 요청을 중단 할 수 있습니다.

클라이언트 엔드에서 문제를 처리하면 서버에서 오버 헤드가 낮아지면서 클라이언트가 사용자가 만드는 느슨한 부분을 제거 할 수 있습니다.

이 기타 question은 그 미세한 세부 사항을 도와야합니다.

+0

좋아, 해결책을 찾았 어! 질문 편집을 참조하십시오. 고맙습니다! – weltschmerz