2010-04-21 5 views
3

나는 동일한 사용자로부터 남용/다중 투표를 최소화하는 투표 시스템을 PHP에서 작성하는 것에 관해 stackoverflow에서 읽었지만 내 질문에 대한 답변을 찾지 못했습니다.PHP 투표 시스템에 세션이 있습니까?

나는 사용자가 항목을 투표하거나 "좋아"등록 할 필요가없는 응용 프로그램이 있습니다. 분명히 남용을 최소화하고자하며 일부 단체 (광산 포함)가 공유 IP 주소를 사용하기 때문에 IP 주소 당 투표 수를 제한하고 싶지 않습니다.

이전에는 인증되지 않은 시스템에서 세션을 사용한 적이 없었 습니다만,이 애플리케이션은 순회 공연 가치에 사용되었지만 (여전히 오용을 최소화하기 위해 사용되었습니다)이 방법이 작동 및 성능에 영향 같은 단점이 있었다 여부, 그리고이 방법으로 세션을 사용하는 것도 가능 여부 것 :

    세션 당 항목 당 하나의 투표권을 허용
  • 웹 사이트가로드 세션을 시작

이것이 좋은 생각이 아니라면 대체 방법으로 IP 주소 당 적당한 수의 투표를 허용하거나 동일한 IP 주소의 표결 사이에 시간 제한을 두는 것입니다.

당신이 뭘 추천하는지/사용자에게 가장 성가시겠습니까? 브라우저를 다시 시작하거나 5 분 동안 투표를 기다리거나 쿠키를 삭제 하시겠습니까?

+0

엔터테인먼트 가치 이외의 다른 결과에 사용하지 않는 것이 좋습니다. – gnud

답변

1

오직 세션 만 좋지 않습니다. 브라우저를 닫고 다시 방문하면 투표 할 수 있기 때문입니다. 세션을 "도움"으로 사용할 수 있습니다. 가장 좋은 방법은 IP 제한을 사용하는 것입니다. 또한 쿠키를 사용할 수 있지만 브라우저에서 쿠키를 정리할 수 있기 때문에 다시 "도우미"입니다. 내가 말한 것처럼 ip 제한을 사용하는 것이 좋습니다. 하나의 ip는 25 회 투표하고 쿠키를 사용하여 한 번 이상 투표하지 못하도록 제한합니다. 따라서 사용자가 한 번 이상 투표하기를 원한다면 그는 쿠키를 삭제할 수 있지만 25 회 이상 투표를 할 수는 없습니다.

5

사용자 인증없이 "심각한"투표 시스템을 만들 수있는 방법이 정말 없습니다, 다른 모든 옵션은 결함이 있습니다

  • 세션 종료 브라우저를 닫을 때, 그래서 그냥하고 you'r 신선한를 다시
  • 쿠키는 귀하의 최선,하지만 그들은 삭제 또는
  • IP 주소 나 쿠키를 선택하는 것이 가장 켐프에 동의
+0

브라우저가 닫히면 세션이 자동으로 종료되지 않습니다. 평생 지속되는 세션을 만들 수 있습니다 (또는 적어도 쿠키가 삭제 될 때까지). 그런 점에서 세션은 쿠키를 사용하여 실현되므로 옵션 # 2와 동일합니다. – deceze

+0

브라우저가 닫히면 기본 동작대로 자동 종료됩니다. 당신은 그것을 바꿀 수 있지만, 당신은 쿠키로 가지고있는 것과 같은 문제가 있습니다. 세션은 쿠키 없이도 작동합니다. –

1

적용 신뢰할 수 및/또는하지를 거부 할 수있다 . 또한 세션은 쿠키도 사용합니다. 차이점은 브라우저가 닫히면 세션 쿠키가 삭제되고 "만료되면"단순 쿠키입니다.이 경우에는 "더 좋음"입니다.

IP 주소에 대해 이야기하는 경우 사용자는 프록시를 사용하여 "IP 필터링"을 우회 할 수 있습니다.

투표가 끝나면 누군가가 결과를 통해 (예 : 5 분 안에 단일 IP에서 100 표를 얻음) 의심스러운 항목이 있는지 확인할 수 있습니다. 그러면 더 정확한 결과를 얻을 수 있습니다.

+1

브라우저가 닫힐 때 세션이 끝나는 것을 모두 말하는 이유는 무엇입니까? 그건 말도 안돼. 그것은 사용 된 세션/쿠키 유형에 따라 다릅니다. – deceze

+0

글쎄, 나는 브라우저를 닫을 때 쿠키를 지우고 다른 사람들도 똑같이하도록 권장하기 때문에 부분적으로 말하고있다. – gnud

+1

deceze, 그 이유는'session_start()' – binaryLV

0

쿠키와 apc/memcached와 같은 서버 캐시 메커니즘을 모두 사용할 수 있습니다. 동일한 키/쿠키 이름을 사용하여 쿠키 결과와 apc 캐시에 투표 결과를 저장하고 두 가지가 모두 존재하는지 확인하십시오.쿠키가 삭제되었지만 apc 키가 여전히 존재하면 누군가가 다시 투표를 시도하고 있다는 것을 알고 있으므로 쿠키를 재설정하고 apc 캐시 값의 수명을 늘릴 수 있습니다.

데이터베이스가 없어도 좋은 해결책이라고 생각합니다. 서버의 메모리가 부족하면 apc 캐시가 플러시됩니다.

+0

을 사용할 때 PHP의 동작 때문입니다. 이유는 무엇입니까? –

관련 문제