С анонимными пользователями, у вас есть два варианта, ни один из которых очень хорошо:
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.
Зачем хранить оценку, если каждый пользователь может голосовать только за одну фотографию? Я согласен с одной таблицей для PictureId и UserId с составным уникальным ограничением, но тогда вам нужно будет запустить запрос count с PictureId, чтобы получить общее количество голосов (т. Е. «Оценка») для этого изображения. – Vicky
Я тоже думал о рейтинге, а не только о голосовании. Возможно, голосование может быть от нуля до пяти звезд или что-то в этом роде. –