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