2011-10-18 2 views
3

GET을 통해 URL의 매개 변수를 기반으로 MySQL 삽입 쿼리를 작성하는 PHP 스크립트가 있습니다. 나는 오늘 같은 LAN에서 오는 것처럼 보이는 두 명의 사용자가 모두 중복 기록을 가지고 있음을 알아 차렸다. 두 번째 사용자는 proxy.organization.tld와 동일한 값을 가진 다른 기록이 몇 분 후에 다른 IP 주소.중복 요청을 담당하는 프록시 서버는 무엇입니까?

나는 이것이 프록시 서버가 HTTP 요청을 만들고 아마도 콘텐츠를 캐싱하는 것과 관련이 있다고 생각한다. 누구든지이 문제를 해결하기위한 아이디어 나 전략이 있습니까? 중복 된 항목을 방지하고 싶습니다.

감사합니다.

답변

2

각 URL 다음에 고유 한 값을 추가하십시오. 프록시 서버가 URL을 "다시 호출"하면 해당 방법이 중복 호출임을 감지 할 수 있습니다.

+0

하나 개의 아이디어는 값의 MD5 해시를하고 테이블에 있음을 기록하고 MD5 해시는 현재 if 문 경우 그것은 아무튼 경우에만 삽입 문을 실행하여 테이블에 존재 여부를 확인하기 위해 확인되었다 '티. 자신 만의 고유 가치 아이디어를 조금 더 자세히 설명하고이를 달성하는 방법을 설명 하시겠습니까? – JohnCharles117

+0

프록시 서버가 웹 사이트를 호출 할 때 (또는 다시 호출 할 때) 원래 호출의 동일한 URL _ 쿼리 문자열 만 보낼 수 있습니다. 따라서 사용자가 페이지 (아마도 insert.php? value = avc & unique = qwerty)에 액세스하면 프록시 서버는 동일한 주소로만 호출합니다. 그래서 동일한 고유 한 값이 전달 될 것입니다. 반복 호출을 필터링하기 위해 마지막 50 개의 고유 한 값을 포함하는 테이블을 저장하면됩니다. – iWantSimpleLife

0

불필요한 중복 삽입이 발생할 수있는 다른 이유가 있습니다. 예를 들어, 브라우저는 페이지를 프리 페치 할 수 있고 거미는 링크를 따라갈 수 없습니다.

GET 요청이 데이터를 수정하면 설계상의 결함이 있습니다. GET은 읽는 데에만 사용해야하며 POST는 데이터를 수정하는 데 사용해야합니다. 모든 브라우저, 프록시 또는 스파이더는 POST 요청에 부작용이있을 수 있으며 GET 요청은 부작용이없는 것으로 간주되는 반면 반복하지 않도록 모든 예방 조치를 취한다는 것을 알고 있습니다. 따라서 성능을 향상시키기 위해 필요에 따라 반복하거나 캐시 할 수 있습니다. 나는 주위를 던지고 있었다