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