2011-08-21 4 views
0

다음은 내가 성취하고자하는 일이며, 생각보다 쉽다고 생각합니다.IP 주소가 MySQL/PHP/JS를 사용하여 한 시간에 특정 링크를 클릭 할 수있는 횟수를 제한합니다.

시간당 두 번 IP 주소로만 클릭 할 수있는 링크를 홈페이지에서 원합니다. 링크를 클릭하면 귀하의 세부 정보를 보내실 실제 양식이있는 '귀하의 이메일 제출'페이지로 연결됩니다.

나는 이것을 달성하기 위해 MySQL DB를 가져야한다고 생각한다. 방문객의 시간/날짜를 테이블에 기록하고 다음에 버튼을 클릭하면 세부 정보와 비교한다. 잘못된 세부 정보, 새 페이지가로드되지 않습니다. 좋은 세부 사항, 새로운 페이지 짐.

어떻게하면됩니까? 나는 진짜 성공이없는 몇 구절에 대한 인터넷 검색을 시도했다. 단지 '네가 이것을 필요로 할 것인가, 아니면 이렇게해야 할 것인가'라는 말만 들었지만 아무런 설명도하지 않았다. 누군가 다른 조언을 빌려 줄 수 있습니까? 나는 열린 귀입니다. 감사.

답변

2

테이블 내에 ip_address 및 time click (datetime 필드)을 저장할 수 있습니다. 정수로 ips를 저장하고 inet_aton() 및 inet_ntoa() 함수를 사용합니다.

select count(*) as last_hour_clicks 
from table 
where ip_address = inet_aton('x.y.z.k') and click_time >= now() - interval 1 hour 

클릭 수와 2가 같으면 다른 클릭을 거부합니다.

+0

어떻게 실제로 구현하기에 본 페이지에 그를 추가? 총 멍청 아 - 알아. – krispie

+0

여기에 코드 태그가 없습니다 ..? – krispie

0

쿠키를 사용하여 각 클릭 클라이언트 측의 시간을 저장하고 링크 표시 여부를 결정할 수 있습니다. 쿠키를 삭제하거나 수정하면 사용자가 쉽게 우회 할 수 있습니다. 그러나 무엇을 하든지 간단히 "이메일 제출"페이지를 북마크하고 원하는만큼 액세스 할 수 있으므로 쿠키는 효과가 있습니다. 그렇지 않으면 기술적이지 않은 사용자를 보지하십시오.

양식을 승인했는지 결정하기 위해 양식을 제출 한 후에는 서버 측 논리를 사용해야합니다.

+0

MySQL과 PHP를 사용하여 IP 주소마다 링크를 두 번만 클릭 할 수 없습니까? 확실하지 않은 방법 ... "양식을 수락할지 여부를 결정하기 위해 양식을 제출하면 서버 측 논리를 사용해야합니다."... 좀 더 도움이 필요합니다. 예, 필요합니다. 또는 당신은 그것을 이렇게해야만 할 것입니다. '그러나 설명은 없습니다. – krispie

1

간단한 사용자 오류를 수정하고 DDoS 공격을 막지 않으려면 MySQL을 사용하는 것이 현실적입니다. MySQL이 서버를 깰 것이므로 Memcache를 사용하지 않는다.

그러나 매우 느리기 때문에 카운트 (*)를 사용하지 않으려합니다. 오히려 등의 INT 기반 구조를 사용

CREATE TABLE `clicks` (
`ip` INT UNSIGNED NOT NULL , 
`time1` INT UNSIGNED NOT NULL , 
`time2` INT UNSIGNED NOT NULL , 
PRIMARY KEY (`ip`) 
) ENGINE = MYISAM 

삽입 :

INSERT INTO clicks (ip,time2) VALUES (INET_ATON('{$_SERVER["REMOTE_ADDR"]}'),UNIX_TIMESTAMP()) ON DUPLICATE KEY UPDATE time1=time2, time2=UNIX_TIMESTAMP() 

검사 :

SELECT INET_NTOA(ip) FROM clicks WHERE ip=INET_ATON('{$_SERVER["REMOTE_ADDR"]}') AND time1+3600-time2+3600<=UNIX_TIMESTAMP(); 
+0

@ gustav- awesome, 지금 우리는 어딘가에 있습니다. 하지만 정확히 무엇을 해야할지 모르겠다 ... 각 페이지마다 어떤 페이지를 넣고 어떻게 작성해야합니까? DB에 연결된 것은 어떨까요? 나는 MySQL + PHP에 대한 멍청한 행동이다. 나에게 계몽 해 주겠니? – krispie

+0

@krispie 글쎄, 나는 여기에 몇 가지 링크를 제공 할 수있다 : [Connecting] (http://php.net/manual/en/function.mysql-connect.php) -> [Creating the structure] (http : // www .w3schools.com/php/php_mysql_create.asp) -> [Inserting] (http://www.w3schools.com/php/php_mysql_insert.asp) – Gustav

관련 문제