2014-04-25 2 views
1

임 테이블에서 노래를 선택하는 스크립트가 실행 될 때마다 노래가 재생되는 얼마나 많은 일부 값을 증가에 약간의 시간에 실행할 수 있습니다,하지만 난 싶습니다 어떻게 시간을 제한하는 방법 1 시간 안에 한 번만 증가하면 5 시간 정도 걸릴 수 있습니다. 즉, 사용자가 노래를 재생하면 처음으로 재생으로 계산 된 다음 다른 시간을 허용하기 전에 5 시간 동안 대기합니다.스크립트는 특정 IP 주소

PHP

난 그냥이 작업을 수행하는 방법을 모르겠어요.

$_SESSION['play_id'] = $_SERVER["REMOTE_ADDR"]; 
    $_SESSION['play_time'] = time(); 
    $then = $_SESSION['play_time']; 
    $now = time(); 
    $diff = $now->diff($then); 
    if ($diff > 2 * 1000){ 
    $query = mysql_query("UPDATE music SET plays = plays + 1 WHERE sid = '$id'") or die (mysql_error()); 
    } else { 
     echo 'not yet'; 
     } 

감사합니다.

+0

'REMOTE_ADDR'은 (는) 사용자를 식별하는 신뢰할만한 방법이 아닙니다. IP 주소가 변경됩니다. –

+1

... 프록시/NAT 뒤에있는 사용자는 주소를 공유합니다. @ SverriM.Olsen – eggyal

+0

IP 주소 대신 사용자 계정을 사용할 수 있습니까? 동일한 IP 주소를 가진 사람이 아닌 올바른 사용자를 타겟팅 할 수있는 쉬운 방법입니다. –

답변

0
$ip = 0 
if (!empty($_SERVER['HTTP_CLIENT_IP'])) { 
    $ip = $_SERVER['HTTP_CLIENT_IP']; 
} else { 
    $ip = $_SERVER['REMOTE_ADDR']; 
} 

보안 문제 ELSEIF { $ IP = $ _SERVER [ 'HTTP_X_FORWARDED_FOR'] (빈 ($ _ SERVER [ 'HTTP_X_FORWARDED_FOR'])!); 쿠키만큼 당신이 그것을 설정 한 지속하면서 }

$_SESSION['play_id'] = $ip; 
     $_SESSION['play_time'] = time(); 
     $then = $_SESSION['play_time']; 
     $now = time(); 
     $diff = $now->diff($then); 
     if ($diff > 2 * 1000){ 
     $query = mysql_query("UPDATE music SET plays = plays + 1 WHERE sid = '$id'") or die (mysql_error()); 
     } else { 
      echo 'not yet'; 
      } 
+1

-1'HTTP_CLIENT_IP'와'HTTP_X_FORWARDED_FOR'는 스푸핑되거나 OP가 가진 거대한 SQL 주입 구멍으로 사용될 수 있습니다. '0'또는 '1'= '1' –

+0

는 주말에 당신이 그/그녀 – aex

+0

그녀에게 감사; P –

0

세션 5 시간 전에 만료 될 수 있습니다. 여기에서 생각하고있는 몇 가지 생각은 재생중인 각 음악의 ID에 해당하는 고유 한 쿠키를 설정하는 것입니다. 내용을 신기원 즉 날짜 ('U') 시간으로 둡니다. 사용자가 음악을 재생하려고 할 때 쿠키가 존재하는지 확인하고, 쿠키가 존재하는 경우 시간 차이가 여전히 1 시간 이내 인 지 확인하십시오. 그렇지 않은 경우 업데이트하십시오. 그게 전부 야