Ограничение нескольких голосов от одного и того же человека в веб-приложении для оценки изображений

StackOverflow https://stackoverflow.com/questions/1090999

  •  11-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь написать веб-приложение в ASP.NET MVC, которое позволяет каждому пользователю голосовать за несколько изображений, но не позволяет им голосовать несколько раз за одно и то же изображение.Пользователи не аутентифицированы.Что мне следует сохранить в базе данных или в файлах cookie?

Это было полезно?

Решение

С анонимными пользователями у вас есть два варианта, ни один из которых не очень хорош:

1) Отслеживайте пользователя с помощью идентификатора пользователя, хранящегося в файле cookie.Пока файл cookie сохраняется.пользователь не может голосовать дважды.Однако они могут удалить или иным образом изменить файл cookie.Возможно, у них отключены файлы cookie.У них могут быть открыты два разных браузера одновременно.Скрипты для "накрутки" (curl http://site/vote?score=5&pic_id=1) в любом случае не будет хранить файлы cookie.По сути, в конечном итоге люди будут голосовать больше, чем следовало бы.

1.5 *

2) Отслеживать пользователя по IP-адресу.По сути, это противоположность.Пользователи не могут голосовать дважды, независимо от удаления файлов cookie, переключения браузера и т. д.Однако несколько человек из одной семьи (использующих DSL-маршрутизатор) могут голосовать только один раз вместе.Многие компании аналогичным образом скрывают множество пользователей за одним IP-адресом.Я думаю, что некоторые интернет-провайдеры тоже (AOL?).В конечном итоге вы получите гораздо меньше «голосов», чем должно было быть зарегистрировано на законных основаниях.

Итак, вопрос в том, хотите ли вы больше или меньше голосов?Если вы считаете, что мошенничество вероятно, я бы выбрал № 2.Но если обман вероятен, значит, есть стимул.И если люди поймут, что их голоса не учитываются (чего они могут и не осознавать), они будут недовольны.

После этого вам решать, будете ли вы хранить каждый голос в виде строки или объединять голоса в одну строку (обновить набор изображений num_votes = num_votes + 1, total_score = total_score + [отправленный балл]).

  • 1.5 Третий вариант — записать свой голос и адрес электронной почты, отправить им электронное письмо со ссылкой для подтверждения и попросить щелкнуть по ней, чтобы записать свой голос.Люди по-прежнему могут обманывать, используя поддельные адреса электронной почты, но это менее вероятно, чем удаление файла cookie.

Другие советы

Сохраните голоса в таблице базы данных со столбцами. PictureId, UserId, Score, и добавьте составное уникальное ограничение к столбцам PictureId и UserId - это гарантирует, что за каждого пользователя и изображение будет только один голос.

Записи базы данных для уникальных, аутентифицированных пользователей, как предполагает Дэниел Брюкнер, должны стать шагом вперед.Файлы cookie ненадежны, поскольку, например, они могут быть удалены или пользователь может использовать другой браузер.

Если ваши пользователи аутентифицированы, вы можете сохранить UserID с помощью голосований за изображения.

Если ваши пользователи анонимны, то системы, как правило, сохраняют их IP-адреса с помощью голосов за изображения.Это не идеально, это не 100% доказательство, но работает в большинстве ситуаций.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top