通过IP检测用户的第一次访问


Detect user's first time visit by IP

如何检测用户的IP地址是否首次访问php中的页面?

我已经尝试过这个代码,但它使用cookie,如果我在浏览器中删除cookie,这不再工作,显然…

if (!isset($_COOKIE['firsttime'])){
    setcookie("firsttime", "no", time()+3600 ); /* 1 hour */
    echo "<script type='text/javascript'>alert('YES');</script>";
    exit();
} else{
    echo "<script type='text/javascript'>alert('NO');</script>";
    exit();
}

如何通过IP检测?

您通常可以通过从$_SERVER['REMOTE_ADDR'](如@andrew所提到的)获取访问者的IP地址。

在某些情况下,由于代理等原因,这可能无法像预期的那样工作…(看这里)但总的来说,它会给你你想要的。

一旦你有了IP地址,你可以将它保存到数据库中,然后每次有人访问时都要查找它,寻找现有的记录。没有结果说明是新IP

然而,这并不是一个很好的方法来确定访问者是否已经访问过你的网站。

最可靠的方法(虽然不是完美的)是使用cookie。当访问者访问你的网站时,设置一个cookie…这仍然是跟踪/标记访问者的最佳方法。

您可能对浏览器指纹识别实验感兴趣,尽管它不是很可靠,因为即使对浏览器配置进行很小的更改也会改变指纹。除非您准备编写复杂的算法来检测微小的变化并计算当前指纹与数据库中的指纹匹配的"概率",否则我建议您坚持使用cookie

$_SERVER['REMOTE_ADDR'];将给出用户当前 ip地址,前提是他们没有被代理。

但是由于isp提供动态ip地址我不认为这是跟踪用户首次访问的可靠方法

没有完美的方法可以做到这一点,因为即使IP地址也可以更改。如果用户有Dynamic IP Address,地址可以频繁更改。

无论哪种方式,使用用户的IP Address,您都必须将地址存储在服务器的某个地方。如果您已经设置了一个数据库,比如MySQL,那么您可以将IP Address存储在一个表中。

参见PHP手册中的MySQLi文档页。

一旦你熟悉了MySQL,你可以写类似这样的代码:

$mysqli = new mysqli("example.com", "user", "password", "database");
if (!$mysqli->connect_errno) {
    //You should validate the IP Address
    $ip = $_SERVER['REMOTE_ADDR'];
    $res = $mysqli->query("SELECT IPAddress FROM tbIP WHERE IPAddress='{$ip}' LIMIT 1")
    if($res !== false){
        if($res->num_rows > 0){
            //Found
            echo "<script type='text/javascript'>alert('YES');</script>";
        } else {
            //Not found
            echo "<script type='text/javascript'>alert('NO');</script>";
            //Here you will probably want to INSERT a new record into the Database
            //tracking the current user.
        }
    }
}

再次,我建议阅读MySQL

如果您没有访问数据库的权限,并且您已经消除了cookies,您可以将IP Addresses写入文件(将MySQL调用替换为从文件读取的调用)。这通常不是一个好的选择,但是如果你没有其他的选择,你就没有太多的选择了。