2013-09-23 6 views
2

나는 현재 작업하고있는 사이트에 대해 동일한 기능을 구현하고 있습니다. 사용자는 로그인 할 필요가 없으며 특정 페이지를 좋아하거나 싫어할 수 있습니다. 마지막에는 가장 좋아하는 기사 또는 기사 목록을 채울 수 있기를 바랍니다.사용자가 '좋아요'를 여러 번 클릭하지 못하도록하는 가장 좋은 방법

저는 현재 onclick javascript 함수를 사용하여 아약스와 PHP 함수를 통해 데이터베이스를 업데이트하는 매우 간단한 방법을 가지고 있습니다. 괜찮습니다. 내가하고 싶은 것은 사용자가 버튼을 스패밍하지 못하게하는 것입니다.
처음에는 IP 주소를 가져 와서 데이터베이스에 저장 한 다음 수표를 실행하는 방법을 생각했습니다. 더 좋은 방법이 있습니까?

+3

사용자 로그인을하지 않고이 일을 더 100 % 바보 - 증거 방법은 없습니다. 데이터베이스에 IP 주소를 기록하면 서브넷의 여러 사용자가 귀하의 콘텐츠를 좋아하지 않게됩니다. – MonkeyZeus

+0

로그인하지 않으셨습니까? 나는 쿠키를 제안 하겠지만 모든 접근법에는 문제가있을 것입니다. – mccainz

+0

쿠키가이 작업에 도움이 될 수 있습니다. 사용자가 '좋아요'를 한 번 클릭하면 쿠키를 저장하십시오. 그리고 'like'클릭을 처리 할 때이 쿠키를 확인하십시오. –

답변

1

쿠키를 사용하십시오. 당신은 사용자가 글을 추천 할 수있는 버튼이 말할 수 123456789

<button id="like" articleID="123456789">Like</button> 

스크립트

function setLike(articleID) { 
    document.cookie=articleID+'=y'; 
} 

function hasLiked(articleID) { 
    var cookies=document.cookie.split(';'); 
    for (var i=0;i<cookies.length;i++) { 
     var cookie=cookies[i].split('='); 
     if (cookie[0]==articleID) return true; 
    } 
    return false; 
} 

var button=document.getElementById('like'); 

button.onclick=function() { 
    var articleID=this.getAttribute('articleID'); 
    if (!hasLiked(articleID)) { 
     //register the like in your system 
     //... 
     // 
     setLike(articleID); 
    } else { 
     alert('You cant like or dislike an article twice'); 
    } 
} 

물론 사용자가 그의 또는 그녀의 쿠키를 삭제할 수 있습니다 -하지만 할 수있는 동일한 페이지와 같은 사용자/100 다른 컴퓨터에서 기사. 위의 내용은 가장 일반적인 시나리오를 방지합니다. 짧은 시간 내에 동일한 컴퓨터에서 반복적으로 많은 시간을 클릭하거나 싫어하는 사람들.

+0

고맙다. 나는 coookies에 대해 더 많이 배우고, 그들은 아직도 발굴하고있다. ( – null

+0

당신이 주변에서 보는 모든 스크립트는 너무 어렵고 힘들게 만들고 지나치다. – davidkonrad

+0

나는 이미 그 자리에있는 아약스 호출로이 작업을하려고합니다. 내가 잘못 될지도 모른다는 말을 할 수 있습니까? – null

1

버튼을 처음 클릭 한 후에 그냥 숨 깁니다. 클릭을 보내기위한 AJAX 핸들러를 사용하는 경우

그것은 심지어 더 의미가 않습니다 ...

4

정직하고 대답은, 당신은 그것을 할 수 없습니다.

"좋아요"버튼을 스팸하고 싶다면 그렇게 할 수있는 방법을 찾아야합니다. 특히 로그인을 강요하지 않으면 (꽤 좋은 봇을 쓰고 꽤 효율적인 스팸 닝이었습니다. 큰 링크 제출 사이트).

자바 스크립트는 평범한 스패머 또는 양말 인형극 계정 소유자 만 중지합니다. 스팸 발송자로서 시간 기반 로봇을 프로그래밍하여 또는 귀하의 서버에 직접 요청을 보내 (귀하의 사이트를로드하지 않음) 귀하의 자바 스크립트를 매우 쉽게 우회 할 수 있습니다.

당신이 정말 효율적으로이 기능 스팸에서 스패머를 방지하려면,해야 할 일은 모든를 기록하는 것입니다 (효율 키워드는 스패머가 당신의 기능 스팸 여전히 수 있지만, 자신의 좋아하는이 포함되지 않기 때문에 여기에) 지리적 정보와 함께 게시물을 좋아하는 IP (항상 100 % 정확하지는 않지만 좋은 시작일 것입니다). 그런 다음 백그라운드에서 의심스러운 출처를 확인하고 그러한 좋아하는 것에 대해 불이익을주는 프로세스를 실행합니다. 전체 카운트에서 이들을 뺍니다).

예를 들어, 주요 잠재 고객이 미국에 거주하는 사람이지만 한 곳의 게시물이 멕시코, 살바도르, 인도, 오스트레일리아, 러시아에서 좋아하는 사람이 많은 경우 프록시 나 스팸 발송자가있을 가능성이 높습니다. TOR과 유사한 네트워크이며 자신의 의지로 IP 주소를 변경할 수 있습니다.

수십만 개의 레코드를 작성한 후에는 IP 주소를 블랙리스트에 올릴 수있는 기반이 충분합니다. 나는 보통 R 프로그래밍 언어를 사용하여 데이터베이스에 대한 통계 정보를 얻는다.

하지만 다시 한 번 좋은 스팸 발송자는 잠재 고객의 국가 또는 지리적 위치에서 침입 한 컴퓨터의 IP 주소 목록을 사용하고 해당 IP를 사용하여 기능을 악용 할 수 있습니다.그 봇은 발견하기가 더 어렵지만 이전 게시물을 분석하고 "좋아요/설명 비율"과 같은 유용한 측정 항목을 제안 할 수 있습니다.

하나의 게시물에 많은 수의 좋아하는 댓글이 있지만 댓글 수가 적다면 누군가가 스팸 메일을 보냈을 가능성이 매우 높습니다.하지만 다시 봇에게 좋아요 표시를하여 댓글이 자연스럽게 보이도록 프로그램 할 수 있습니다.

어떤 프로젝트를 진행하고 있는지 확실하지 않지만 링크 제출과 비슷한 점이 있다면 (사용자가 좋아하는 항목은 모두) 좋아요 수만큼 순위를 매기 지 마십시오.

좋아요 수는 요인 일뿐입니다. HackerNews 또는 Reddit이 게시물의 순위를 매기는 방식을 살펴볼 수 있습니다 (해당 프로젝트는 오픈 소스 임). 그러나 여러 요소가 복합되어 있습니다.

+0

그 꽤 포괄적 인 대답이야. 사이트가 그런 종류의 상태에 도착하면 난 아주 감동 것입니다 :) – null

2

기술적으로 그렇게 할 수있는 폭탄없는 방법은 없습니다. ip-useragent 조합 당 하나의 표를 허용하면 꽤 가까워 질 수 있습니다. 이것을 서버 측에서 구현해야합니다. PHP 예

$concienceKey = md5($_SERVER['REMOTE_ADDR'] . $_SERVER['USER_AGENT']); 

$query = "SELECT COUNT(*) FROM clickConcience WHERE key = `" . $concienceKey . "`"; 

//run your query 
//.....and get the $count; 
// 

//already voted! 
if($count > 0){ 
     echo 'already voted'; 
     return false; 
} 

//remember entry 
$insert = "INSERT INTO clickConcience (key, datetime) VALUES (`" . $concienceKey . "`, NOW())"; 

//run your query 
//.....and insert 
// 

return true; 
관련 문제