我正在制作一个图片库,我希望有一个投票按钮,人们可以按此按钮来增加图片收到的投票数。显然,我不希望人们向投票结果按钮发送垃圾邮件,因此我希望将每个用户限制为1票。
我无权访问任何类型的数据库(写入文件除外),登录系统对我的目标受众不利。
存储用户之前是否访问过该页面的最佳方法是什么?为此,使用PHP或JavaScript或其他东西会更好吗?
答案 0 :(得分:2)
如果没有身份验证系统,您可以暂时限制用户的操作,但用户可以欺骗您的系统多次投票。
以下是不使用登录/身份验证系统的解决方案(及其缺点):
您可以使用cookies,localstorage或任何其他方式存储upvote操作客户端,但用户可以清除所有这些以重新获得再次投票的权利。对于大多数人来说,它可以是好的(取决于你的观众),但任何想要欺骗系统的技术人员都可以做到。
您可以将更新操作服务器端存储为引用,例如用户代理或IP地址。但是这些“身份验证”系统并不可靠:用户可以共享同一个用户代理并轻松更改它们。多个用户可以共享相同的IP地址并使用代理来更改其IP地址。
第三种解决方案是使用外部系统:facebook +1投票系统(facebook使用自己的身份验证系统)或google +或其他外部服务。用户将无法欺骗系统,但您没有自己的upvote计数,没有facebook或google +帐户的人将无法投票。
答案 1 :(得分:1)
就个人而言,我会发现自己是一个数据库...但是如果你不想使用它,你仍然可以写一个文件。例如:创建一个数组并将用户的IP地址存储在其中。然后将此数组作为JSON代码写入文件(json_encode)并存储它。当用户单击like按钮时,读取文件,解码json(json_decode)并检查文件中是否存在IP地址。如果不是:添加到数组并存储到该文件。喜欢的数量等于JSON对象中的IP地址数量。
实现此功能的最佳方法是在按下“喜欢”按钮时进行ajax调用。比访问者看不到页面加载。
注意:从技术上讲,您可以设置一个cookie,以“记住”用户已经点击了该按钮。这样可以节省一些存储喜欢的文件的读数。