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

How to catch the same user with different ip

我们有以下例子:

一个网站(使用 Apache/MySQL 用 PHP 编写的 Web 应用程序),您可以在其中对不同的 post 投票。例如,我是一个用户,我 post "Anna likes apples".

每个访问该网站的人都必须能够为我的 post 投票(如果他们喜欢的话),但只能投票一次(无论是否注册)!
实现这一点的最佳方法(据我所知)是检查想要投票的未注册用户的 IP。但是当用户更改他的IP时你会怎么做?

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

要确定用户是否真的相同,您应该更多地依赖其网卡的 MAC 地址,而不是其 IP 地址。在这里我发现了一个类似的问题,有人提出 JavaScript 来获取远程 MAC 地址。

How can I get the MAC and the IP address of a connected client in PHP?

请注意,这里没有 100% 的方法。有决心的用户会找到方法。保守一点,不要让可疑的情况发生,这取决于你。

也许您可以为所有提到的方法分配唯一性概率:用户会话、浏览器的用户代理、cookie、IP,MAC。阻止的阈值应该是取决于后果严重性的业务决策。

您可以使用 cookie。例如:

setcookie("already_voted","yes");

稍后检查该 cookie 是否存在:

if( $_COOKIE["already_voted"] == "yes") /* Disallow voting */

这里的主要问题是用户可以删除 cookie:/

如果他们没有登录,我想只需使用一个会话变量...将其放在每个脚本的顶部:

// 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;

并且在代码模板中仅在此条件下显示投票按钮:

if (empty($_SESSION['votes']['post_id'])) {
    //show voting button html
}

具体的实现方式会因您构建代码的方式而异,但这是在没有任何示例可供使用的情况下的原始逻辑。如果他们清除所有浏览器 cache/cookies,他们可以再次投票,但如果您希望它与来宾兼容,您几乎无法使其防弹。

如果用户已经注册,您可以通过在用户信息中存储postID来查看用户的投票。然后当用户投票时,检查之前是否存储过postID。

如果没有注册的用户,一台设备只能投一票(没有登录),我认为cookie存储在设备中,所以你可以设置一个带有一些特定信息的cookie(TimeofSetCookie, UnregisterUserName,PATH.....), 然后使用 $_COOKIE[...] 获取 cookie 并检查它。

嗯....我只有这两个办法....希望能帮到你

我觉得会有问题,不同的人可以用同一个IP或者同一个设备去投票。那么在这种情况下,您的网站可能会失去这些投票。你为什么不严格只有成员可以投票?