我注意到,为了投票,SO 实现了一个 XHR 方法,该方法 POST 到帖子 Controller 并通过 URL 发送帖子 ID 和投票类型,此外还发送一个 fkey
参数,例如:
http://stackoverflow.com/posts/1/vote/2
我将实现类似的技术,我想知道除了实现此技术时的整体逻辑之外,我还可以使用什么逻辑来防止同一用户重复投票并防止垃圾邮件。
我将存储它们的表的架构:
thread_id user_id vote_type
2334 1 2
到目前为止,我想出了这些要点:
- 确保用户已登录
- 确保发送有效的帖子 ID 和有效的投票类型
- 确保在发布后,用户之前没有投票过
- 创建哈希的代码不能包含动态信息(例如用户代理),因为用户可能使用不同的浏览器、不同的操作系统,对吗?
更新:
“SO 可能正在使用登录 cookie 来识别用户。” - 安德鲁
有人可以演示如何完成此操作,或者换句话说,更具体地提供如何生成 fkey
(一个字母数字 32 位字符串)的示例吗?
问题:
- 由于我没有使用 XHR 代码将实际的用户 ID 发送到任何地方,这是否意味着我必须更新我的表架构,以便我可以存储
fkey
而不是>user_id
?fkey
对于每个用户来说可能必须是唯一的,因此我可以查询投票表中是否有一行具有任何 fkey。
对于实现类似技术的任何人提供任何提示或见解,我们将不胜感激。
最佳答案
在字段(thread_id、user_id)上创建唯一索引,DBengine 将保护您免受一个线程上的多个评论的影响:)
关于php - 像 Stackoverflow 那样的独特用户投票策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2045263/