如何用不同的ip捕获同一个用户

时间:2015-09-24 15:11:53

标签: php mysql apache session

我们有以下示例:

一个网站(使用Apache / MySQL用PHP编写的网络应用程序),您可以在不同的帖子上投票。例如,我是一名用户,我发布了“Anna like apples”。

访问网站的每个人必须能够在我喜欢的情况下投票,但只能投票一次(无论是否注册)!
实现这一点的最佳方法(正如我目前所知)是检查想要upvote的未注册用户的IP。但是当用户更改他的IP时你会怎么做?

我们如何检查用户之前是否曾在同一台计算机上投票,但使用不同的IP?

4 个答案:

答案 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或同一设备进行投票。那么在这种情况下,您的网站可能会失去这些选票。你为什么不严格只有会员可以投票?