用PHP生成设备的唯一ID

7
为了避免同一设备发送请求,如何使用PHP获取所有移动设备的唯一ID?

2
登录并为每个请求发送一个唯一的ID,例如哈希值... - ka_lin
是的,但用户可以从同一设备创建多个帐户。 - qwerty
你可以使用某种设备指纹来追踪移动设备。虽然不是绝对可靠的,但可以在一定程度上提供帮助。 - AbdullahC
2
简而言之:这是不可能的。更长的解释是:你可以让它变得困难一些。 - Wrikken
2个回答

19

要可靠地识别客户端设备并不容易:

  1. 您可以设置cookie,但用户可以伪造、修改或删除它。
  2. 您可以尝试跟踪IP地址,但用户可能使用VPN、代理或具有动态IP;此外,他可能是本地网络的一部分,您的代码可能会影响多个用户。
  3. 您可以尝试使用Flash Cookie,但这些也是可管理的;更不用说用户可能没有安装Flash。
  4. 您可以尝试使用浏览器指纹技术,但用户可能会切换到另一个浏览器、安装插件或简单地更改一些设置。
  5. 您可以尝试获取MAC地址,但是......这也失败了

您最好的选择是强制要求注册,并假定一个帐户=一个用户;

您次好的选择是只对设备进行cookie,并依赖于该cookie。当然 - 有经验的用户很快就会发现它,但您将涵盖大多数非经验丰富的用户;此外,这也是Google跟踪用户的做法。

我不知道您想要实现什么,但如果是用户跟踪的话,可以这样考虑:如果强大的Google都依赖于验证+cookie,那为什么您不这样做呢?

另一个技巧:

http://www.radicalresearch.co.uk/lab/hstssupercookies/

因为HSTS是一种安全特性,并不用于追踪用户,所以网络浏览器会与cookie不同地处理它。只有通过故意错误应用HSTS才能利用它来追踪用户。

0
在 PHP 中,没有原生的方法可以直接为设备生成唯一的 ID。但是,你可以使用 HTTP 标头的组合。
function createDeviceFingerprint()
{
    $userAgent = $_SERVER['HTTP_USER_AGENT'];
    $acceptLanguage = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
    $ipAddress = $_SERVER['REMOTE_ADDR'];

    $fingerprint = $userAgent . $acceptLanguage . $ipAddress;

    return md5($fingerprint);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接