2009-07-07 1 views
0

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

Пользователи НЕ аутентифицированы.

ответ

3

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

1) Отслеживание пользователя с идентификатором пользователя, хранящимся в куках. Пока файл cookie сохраняется. пользователь не может голосовать дважды. Однако они могут удалить или иным образом изменить файл cookie. У них могут быть отключены файлы cookie. Одновременно они могут открывать два разных браузера. Скрипты для «обмана» (завиток 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.
6

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

+0

Зачем хранить оценку, если каждый пользователь может голосовать только за одну фотографию? Я согласен с одной таблицей для PictureId и UserId с составным уникальным ограничением, но тогда вам нужно будет запустить запрос count с PictureId, чтобы получить общее количество голосов (т. Е. «Оценка») для этого изображения. – Vicky

+0

Я тоже думал о рейтинге, а не только о голосовании. Возможно, голосование может быть от нуля до пяти звезд или что-то в этом роде. –

1

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

0

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

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