网站首次访问,如何检测?

时间:2013-03-19 08:22:52

标签: php web

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

另外,我可以使用任何库吗?

4 个答案:

答案 0 :(得分: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地址并且他们正在使用代理,则此操作将失败。你可以随时改写他们的操作系统。

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

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

      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().
        }
      }

  }

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

  1. IP地址
  2. 操作系统的名称
  3. 屏幕分辨率
  4. 时区设置,
  5. 计算机上安装的字体,
  6. 包含有关浏览器信息的字符串(即用户代理字符串),
  7. 测试的时间和日期,
  8. 插件安装在您的浏览器上,
  9. 接受的MIME类型列表
  10. 导航器对象哈希值,navigator.doNotTrack和navigator.buildID的值,
  11. 和生成的标识符。
  12. 当然,你不需要所有这些。其中一部分(例如IPScreen resolutionUserAgent)作为用户的指纹就足够了。

    我怎么知道? 之前使用过Cross browser fingerprinting技术。你可以在这里阅读更多: http://fingerprint.pet-portal.eu/

    事实上,即使他改变了浏览器,你也可以跟踪实际入境与回归用户!

答案 3 :(得分:-1)

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