2011-05-06 8 views
2
if($_POST['body']) { 
//do my stuff 
} 

하지만 $ _POST [ 'body'] 사용자 당 100 (IP) 액세스를 제한한다고 가정 해 봅시다. 동일한 사용자 (동일한 IP) 액세스/$ _POST [ '본문]]를 시도 할 때마다 그 사람 수를 제한하고 한계에 도달하면 (이 시간 제한 100) 오류 메시지를 표시하고 그 사람이 $ _POST ['본문 '] 10 분 후.

첫 번째 아이디어는 MySQL을 사용하여 모든 IP를 기록하고 액세스 시간을 계산하는 것입니다. 그러나 사이트에 많은 방문자가있는 경우 IP가 기록하는 양을 상상해보십시오. 그래서, 그것은 mysql없이 할 수 있습니까? 그렇다면 스크립트를 제공해주십시오. 영어에 대한

무엇인가, 이해가 안 물어 jusk 경우, 미안 :/

답변

1

유일한 방법은이 서버 쪽을 저장하는 것이며 데이터베이스 탭을 제대로 정리하면 너무 커지지 않습니다.

쿠키 또는 세션 (쿠키 기반)을 사용할 수 있지만 이는 클라이언트 측에서 사람들이 쿠키를 삭제하거나 변경할 수 있습니다.

+0

잠시 후 MySQL cron/cleanup을 사용 하시겠습니까? – ZeroSuf3r

+0

10 분 이상 경과 된 레코드를 삭제할 때마다 지금 Cron 작업을 실행합니다. – m4rc

3

당신을위한 충분한 세션을 사용합니까?

if($_POST['body']){ 
    if($_SESSION['counter'] < 100){ 
     //... 
     $_SESSION['counter']++; 
    } 
} 

다른 IP는 다른 사용자를 의미하지 않습니다. 많은 사용자가 동일한 프록시를 사용하여 동일한 IP 주소를 모두 사용할 수 있습니다.

+0

+1 내가 제안하려고했던 것이기 때문에, 나는 IP와 프록시에 대해서도 같은 지적을했을 것이다. 그러나'session_start()'를 미리 수행하는 것을 잊지 마십시오! – Spudley

+0

사용자가 쿠키를 제거하거나이 사이트에 대한 쿠키를 거부하는 경우이 방법은 작동하지 않습니다. – Palantir

+0

@Palantir 세션은 클라이언트 측이 아니라 서버 측이므로 세션을 통해 사용자가 쿠키를 허용하지 않는 경우 중요하지 않습니다. – m4rc

0

내 첫 번째 생각도 DB가 될 것입니다. cookies을 사용해 보셨습니까?