0

我正在做一个基本网站,用户必须进入该网站,如果这是第一次访问,那么他/她会看到一些信息。我不想使用 cookie,因为并非所有用户都会启用他们的 cookie。IP的问题在于它主要是动态的,因此也不是很有效。

另外,有没有我可以使用的库?

4

4 回答 4

1

IP 不能识别用户。它只是识别网络上的一个节点(防火墙、NIC 等)。如果不使用 cookie,真的没有办法在全球范围内说明这一点。您必须在他们的机器上存储一些东西才能让他们将其返回给您的应用程序。出于安全原因,浏览器是匿名的。人们必须自愿做出一些识别。

我解决这个问题的方法是记录用户的交互以及他们在 MySQL 中的会话。我检查他们是否使用 Javascript 以及是否启用了 cookie。如果他们启用了 cookie,那么我会向他们传递一个唯一的 ID。如果他们不这样做,那么我只是忽略数据。如果他们确实打开了 cookie 或 javascript,那么我将在数据库中创建额外的标志。在他们提交个人身份信息时,我可以将他们的记录与文件中的其他信息配对。

通过类似于亚马逊的 [地址] 栏传递 $_GET 变量,有一种老式的方法来做到这一点。您还可以使网站上的所有按钮和链接都使用 POST 表单(但这更麻烦)。但是,除非您对信息进行散列并继续将其传递,否则您将无法信任该信息。始终检查哈希以确保它们不会更改查询行。

因此,如果您要传递用户 ID,那么您将拥有一个可以像这样工作的地址栏:

<?php
  function addrAppend($uid){
    //secret word would be something that you know so it works like a pre-shared key.
    $hash = md5($uid."secretword".$_SERVER['REMOTE_ADDR']);
    $app="?uid=$uid&hash=$hash";

    return $app;
  }

 ?>

请注意,如果您正在散列用户的 IP 地址并且他们正在使用代理,这将失败。你总是可以散列他们的操作系统。

我讨厌内联,因为它不是很好的形式,但是当你在布局中调用它时,你可以说:'>我的链接

对于下一页上的检查和验证,您可以执行以下操作:

      if(!empty($_GET['hash'])){
        if ($_GET['hash']==md5($temp_UID."secretword".$client_ADDR)){
         //then it's unaltered assuming they didn't guess your hashing convention
        } else {
         //then they altered the get vars so flush the info or end().
        }
      }

  }
于 2013-03-19T08:31:57.443 回答
0

为那些使用现代网络浏览器的人使用 localStorage:

https://developer.mozilla.org/en-US/docs/DOM/Storage#localStorage

于 2013-03-19T08:25:08.617 回答
0

如果您想构建专业级的跟踪解决方案。您可以存储来自用户的以下内容:

  1. IP地址
  2. 操作系统的名称
  3. 屏幕分辨率
  4. 时区设置,
  5. 计算机上安装的字体,
  6. 包含浏览器信息的字符串(即用户代理字符串),
  7. 测试的时间和日期,
  8. 安装在浏览器上的插件,
  9. 接受的 MIME 类型列表,
  10. navigator 对象散列, navigator.doNotTrack 和 navigator.buildID 的值,
  11. 和生成的标识符。

当然,您不需要所有这些。这些(如IP, Screen resolution, UserAgent)的子集作为用户的指纹就足够了。

我怎么知道?Cross browser fingerprinting较早从事技术 工作。您可以在此处阅读更多信息:http: //fingerprint.pet-portal.eu/

事实上,即使他更改了浏览器,您也可以跟踪实际进入与返回的用户!

于 2013-03-19T08:36:52.603 回答
-1

IP是识别用户的最佳方式。它可以明显改变,但事实就是如此。

于 2013-03-19T08:24:45.827 回答