я заметил, что для голосования SO реализует метод XHR, какие записи в контроллер сообщений и отправляет сообщение ID и голосование типа через URL, в дополнение посылается параметр fkey
, например:Стратегия для уникального голосования пользователя, такого как Stackoverflow?
http://stackoverflow.com/posts/1/vote/2
Я собираюсь внедрить подобный метод, мне интересно, какую логику я мог бы использовать, чтобы предотвратить дублирование голосования одним и тем же пользователем и предотвратить спам, в дополнение к общей логике при реализации этого.
Схема для таблицы я буду хранить их:
thread_id user_id vote_type
2334 1 2
До сих пор я пришел с этими точками пулевых:
- обеспечения пользователь вошел в
- убедитесь, что действительный идентификатор сообщения и действительный тип голосования отправляется
- гарантировать, что после POSTing пользователь еще не проголосовал
- код, создающий хеш, не может содержать динамическую информацию, такую как пользовательский агент, поскольку пользователь может находиться в другом браузере, другой ОС, правильно?
Update:
"Так, вероятно, используя логин куки для идентификации пользователя" - Andrew
Может ли кто-нибудь продемонстрировать, как это было бы сделано, или, другими словами, более конкретно представить пример того, как генерируется fkey
, который представляет собой буквенно-цифровую 32-битную строку?
Вопрос:
- , так как я не посылать фактический идентификатор пользователя в любом месте с моей XHR кода, значит ли это, я должен обновить схему таблицы, так что я могу хранить
fkey
вместо говорят ,user_id
?fkey
, вероятно, должен быть уникальным для каждого пользователя, и поэтому я, вероятно, могу спросить, есть ли строка в таблице для голосования, в которой есть fkey.
Поблагодарите за подсказку и профайл для тех, кто реализует подобную технику.
Почему вы не посылающего фактический идентификатор пользователя в любом месте с кодом XHR? –
хорошо, я заметил, что SO не использовал его, и, возможно, по уважительной причине .. можно создать пользовательскую форму, поместить поле идентификатора пользователя со значением и POST, и это будет действительный запрос, нет? Однако, если вы используете что-то вроде «fkey», шансы на то, что никто не сможет отменить программу, чтобы получить тот же хэш на основе пользователя, поэтому я думаю, что SO использует этот метод. –
SO, вероятно, использует файл cookie для идентификации пользователя. Я проверил с Firebug, и файлы cookie отправляются. – Jess