我们有以下示例:
一个网站(使用Apache / MySQL用PHP编写的网络应用程序),您可以在不同的帖子上投票。例如,我是一名用户,我发布了“Anna like apples”。
访问网站的每个人必须能够在我喜欢的情况下投票,但只能投票一次(无论是否注册)!
实现这一点的最佳方法(正如我目前所知)是检查想要upvote的未注册用户的IP。但是当用户更改他的IP时你会怎么做?
我们如何检查用户之前是否曾在同一台计算机上投票,但使用不同的IP?
答案 0 :(得分:1)
要确定用户是否真的相同,您应该更多地依赖其NIC的MAC地址而不是IP地址。在这里我发现了一个类似的问题,其中一个提出JavaScript来获取远程MAC地址。
How can I get the MAC and the IP address of a connected client in PHP?
请注意,这里没有100%的方法。确定的用户将找到方法。你应该保守并且不允许可疑案件。
也许你可以为所有提到的方法分配唯一性概率:用户会话,浏览器的用户代理,cookie,IP,MAC。阻止的门槛应该是一个业务决策,取决于后果的严重程度。
答案 1 :(得分:1)
您可以使用Cookie。例如:
setcookie("already_voted","yes");
稍后检查该cookie是否存在:
if( $_COOKIE["already_voted"] == "yes") /* Disallow voting */
这里的主要问题是用户可以删除cookie:/
答案 2 :(得分:1)
如果他们没有登录,我只想使用会话变量......把它放在每个脚本的顶部:
LoaderManager.LoaderCallbacks<Cursor>
在页面上,一旦他们点击投票设置:
// set cookie lifetime for 1000 days (60sec * 60mins * 24hours * 1000days)
ini_set('session.cookie_lifetime', 60 * 60 * 24 * 1000);
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 1000);
// start session
session_start();
在代码模板中,只显示此条件下的投票按钮:
$_SESSION['votes']['post_id'] = 1;
具体实现方式取决于您如何构建代码,但这是缺少任何示例的原始逻辑。如果他们清除所有浏览器缓存/ cookie,他们可以再次投票,但是如果你想让它与客户兼容,那么你就可以做些防弹。
答案 3 :(得分:0)
如果用户已注册,您可以通过将postID存储在用户的信息中来检查用户的投票。然后,当用户投票时,检查postID是否已经存储过。
如果没有注册的用户和一个设备只能进行一次投票(没有登录),我认为cookie存储在设备中,因此你可以设置一个带有一些特定信息的cookie(TimeofSetCookie,UnregisterUserName,路径.....),然后使用$ _COOKIE [...]获取cookie并检查它。
嗯....我只能有这两种方式......希望他们可以帮助你我认为会有问题,不同的人可以使用相同的IP或同一设备进行投票。那么在这种情况下,您的网站可能会失去这些选票。你为什么不严格只有会员可以投票?