将当前ip地址保存在mysql表中


saving current ip addresses in mysql table

我正在寻找一种好方法,来显示目前有多少人访问我的网站(实时)。

我发现,当我把访问我的服务器/站点的人的ip地址保存在mysql表中时,这可能是最简单的方法。

所以我可能要做的是:

创建配置良好的mysql表

添加保存ip地址的功能(我想是在php中)

如果不再需要,则添加删除ip地址的功能

使过程实时或接近实时

有人能帮我吗?

以下是一个快速示例,说明如何获取客户端的真实IP地址,然后从mysql DB 中存储和检索其值

//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
  $ip=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
  $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
  $ip=$_SERVER['REMOTE_ADDR'];
}
//The value of $ip at this point would look something like: "192.0.34.166"
$ip = ip2long($ip);
//The $ip would now look something like: 1073732954

现在您已经将客户端的真实IP地址转换为INT格式,您可以像通常一样将其写入DB

$sql = "INSERT INTO user(ip) VALUES('$ip')";
$dbQuery = mysql_query($sql,$dbLink);

有关此链接的更多信息:在MySQL中存储IP地址的最佳方式

附加信息:使您的代码不受SQL注入的影响。使用PDOMYSQLI

使用PDO扩展的示例:

<?php
    $stmt = $dbh->prepare("INSERT INTO user(ip) VALUES(?)");
    $stmt->bindParam(1, $ip);
    $stmt->execute();
?>

将访问者存储到数据库中(与其他答案一样)。使用一个datetime字段,该字段保存访问者最后一次请求的日期(您必须在每次页面查看时更新该行)。

现在,您可以使用MySQL间隔计算"当前在线访问者"。

例如:

SELECT
COUNT(1) AS `online_visitors`
FROM `visitors`
WHERE `datetime` > NOW() - INTERVAL 30 SECONDS

首先,我可以建议这个问题的标题不是很好吗?在寻求帮助时,人们会猜测问题的解决方案是什么,这是一个典型的错误——在我工作过的当前/以前的公司,当员工提交错误报告时,我经常看到这种情况。

你试图实现的是实现某种形式的分析,这样你就可以确定有多少人访问你的网站,其中有多少人是唯一的访问者,还可以查看当前使用该网站的人的实时数据。因此,一个更好的标题应该是"我如何才能获得关于谁在访问我的网站的信息?"。

将ip地址存储在表中是实现这一目标的有效方法,但远非理想。我强烈建议使用谷歌分析(或类似的东西),因为这将使你能够看到所有这些信息和更多信息,而且这不需要你付出太多努力。你甚至不必是一个程序员——你只需将他们提供的代码片段复制并粘贴到你的HEAD标记中。关于如何做到这一点,有很多信息,所以我不会详细介绍,但如果你有任何问题,请不要犹豫。

这是Google Analytics已经内置的功能,IP地址不是跟踪访客数量的最佳方式。

每次请求页面时,您都可以将IP地址推送到MySQL数据库,这样它就会是唯一的。

<?php
    $ipaddress = $_SERVER["REMOTE_ADDR"];
    mysql_connect();
    mysql_select_db("visitors");
    mysql_query("INSERT INTO `visitors` (`ipaddress`) VALUES ('$ipaddress')");
    mysql_close();
?>