通过IP检测用户的首次访问

时间:2014-07-07 19:40:11

标签: php ip-address

如何在php中首次检测到用户的IP地址是否正在访问该网页?

我已经尝试过此代码,但它使用了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检测?

3 个答案:

答案 0 :(得分:1)

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

在某些情况下,由于代理等问题,这可能无法正常工作......(look here)但一般来说它会为您提供所需内容。

获得IP地址后,您可以将其保留到数据库中,然后在每次有人访问时查找,查找现有记录。没有结果意味着它是一个新的IP。

然而,这不是确定访问者是否已访问过您网站的一种非常好的方法。

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

您可能对试验browser fingerprinting感兴趣,虽然它不太可靠,因为即使对浏览器配置进行微小更改也可能会更改指纹。除非您准备编写复杂的算法来检测微小变化并计算当前指纹的“概率”以匹配数据库中的一个,否则我建议坚持使用 cookies

答案 1 :(得分:0)

$_SERVER['REMOTE_ADDR'];会为用户提供当前 IP地址,前提是他们没有代理。

但由于isp发布动态IP地址,我不会指望这是跟踪用户首次访问的可靠方式

答案 2 :(得分:0)

没有完美的方法,因为即使IP地址也可以改变。如果用户有Dynamic IP Address,则地址可能会频繁更改。

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

请参阅MySQLi手册中的PHP documentation page

熟悉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调用替换为来自这通常不是一个好的选择,但是如果你没有其他选择,你就没有多少选择。