Какой общий метод используется на веб-языках, чтобы позволить незарегистрированным пользователям голосовать? - PullRequest
2 голосов
/ 27 ноября 2011

Я пытаюсь понять общий механизм, используемый некоторыми веб-сайтами, чтобы позволить незарегистрированным пользователям или просто гостям голосовать за что-то (например, обзоры, видео, изображения и т. Д.).Как они отслеживают это?Как и на таких сайтах, один и тот же гость не может голосовать дважды с одного терминала.Они хранят свои IP-адреса?или они сохраняют идентификатор компьютера / имя?

Любые идеи приветствуются.

PS: (mywot.com) является примером таких сайтов.

Ответы [ 3 ]

5 голосов
/ 27 ноября 2011

Они используют куки или сеансы для идентификации компьютера, который уже проголосовал.Если вы немного понимаете Javascript или PHP, я могу привести несколько примеров.

РЕДАКТИРОВАТЬ: ОК, вот пример:

<button value="VOTE" onClick="vote();">
<script>
var votes = 9654;  //Some vote counter - only for test purposes - practically, this wouldn't work, the votes would have to be stored somewhere, this number is only stored in the browser and won't actually change for everyone, who sees the page!
function vote()
{
 var cookies = document.cookie.split(";"); //Make an array from the string
 var alreadyVoted = false;
 for (var i = 0; i < cookies.length; i++)  //Iterate through the array
 {
  temp = cookies[i].split("=");
  if (temp[0] == "voted" && temp[1] == "true")  //The cookie is there and it is "true", he voted already
   alreadyVoted = true;
 }
 if (alreadyVoted)
 {
  alert("You can't vote twice, sorry.");
 }
 else
 {
  var date = new Date();
    date.setTime(date.getTime()+(5*24*60*60*1000));  //Cookie will last for five days    (*hours*mins*secs*milisecs)
    var strDate = date.toGMTString();  //Convert to cookie-valid string
  document.cookie = 'voted=true; expires=' + strDate + '; path=/';  //Creating the cookie
  votes++;  //Here would be probably some ajax function to increase the votes number
  alert("Thanks for voting!\nVotes: "+votes);
 }
}
</script>

Надеюсь, это поможет, но это очень простокод демострации cookie и фактически не будет работать для голосования!Вам бы пришлось использовать какой-то PHP или что-то подобное для хранения значений голосов ...

1 голос
/ 27 ноября 2011

Cookies - действительно решение.Вот система, которая будет работать:

Имейте таблицу голосов в базе данных, запоминающую голоса для каждого идентификатора посетителя.Когда посетитель заходит на ваш сайт, проверьте, содержит ли запрос cookie-файл visitor_id.Если нет, то сгенерируйте уникальный visitor_id (используя генератор uuid) и поместите cookie cookie visitor_id в ответ, сгенерированный идентификатор в качестве значения.Этот файл cookie должен быть постоянным.

Каждый раз, когда запускается голосование (и / или каждый раз, когда вы генерируете ссылку для голосования), проверьте, проголосовал ли текущий посетитель, идентифицированный его файлом cookie visitor_id, или нет, спасибо.к таблице голосов.Когда голосование завершено, сохраните его в таблице голосов.

Конечно, ничто не мешает посетителю удалить свои куки-файлы или использовать другой браузер или компьютер для голосования несколько раз.Но без аутентификации это лучшее, что вы можете сделать.

1 голос
/ 27 ноября 2011

Обычная техника - использовать куки.IP-адресов недостаточно, потому что многие места в наши дни используют NAT (офисы, киберкафе, большинство домов с DSL-маршрутизаторами).

В идеале файлы cookie должны обрабатываться в серверной части, но также могут обрабатываться в javascript вбраузер.

...