我注意到,为了投票,SO 实现了一个 XHR 方法,该方法 POST 到帖子控制器并通过 URL 发送帖子 ID 和投票类型,此外fkey
还发送了一个参数,例如:
http://stackoverflow.com/posts/1/vote/2
我将实施类似的技术,我想知道除了实施时的整体逻辑之外,我还可以使用什么逻辑来防止同一用户重复投票并防止垃圾邮件。
我将存储它们的表的架构:
thread_id user_id vote_type
2334 1 2
到目前为止,我想出了这些要点:
- 确保用户已登录
- 确保发送有效的帖子 ID 和有效的投票类型
- 确保在 POST 之后,用户之前没有投票过
- 创建哈希的代码不能包含动态信息,例如用户代理,因为用户可能在不同的浏览器、不同的操作系统上,对吧?
更新:
“SO 可能正在使用登录 cookie 来识别用户。” - 安德鲁
有人可以演示如何做到这一点,或者更具体地说,提供一个示例,说明如何fkey
生成 32 位字母数字字符串?
问题:
- 因为我没有用我的 XHR 代码在任何地方发送实际的用户 ID,这是否意味着我必须更新我的表模式,以便我可以存储
fkey
而不是说user_id
? 可能必须对每个用户都是唯一的fkey
,因此我可以查询投票表中是否有一行具有任何 fkey。
将不胜感激任何实施类似技术的人的提示或见解。