【问题标题】:saving current ip addresses in mysql table在mysql表中保存当前IP地址
【发布时间】:2012-08-31 11:54:23
【问题描述】:

我正在寻找一种好方法来显示当前(实时)访问我的网站的人数。

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

所以我可能要做的是:

创建一个配置良好的 mysql 表

添加保存IP地址的功能(我猜是php)

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

使过程实时或接近实时

有人可以帮帮我吗?

【问题讨论】:

  • 我们很乐意为您提供帮助。你写的代码有什么问题?
  • 最简单的方法是集成一个谷歌分析标签并让他们进行计数。 IP 地址几乎无法获得可靠的数据。您还需要至少 cookie 跟踪。
  • 看看Piwik - 它会为您进行统计跟踪。
  • 好吧,我刚开始这个项目,我对所有 php 和 mysql 的东西都很陌生!开始可能是一个很难的问题,但如果能拥有它真的很不错。

标签: php mysql web


【解决方案1】:

这是一个快速示例,说明如何获取客户端的真实 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格式,您可以像往常一样将其写入数据库

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

有关此链接的更多信息:Best way to store IP addresses in MySQL

附加信息:使您的代码免受 SQL Injection 的影响。使用 PDOMYSQLI

使用 PDO 扩展的示例:

<?php

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

    $stmt->execute();
?>

【讨论】:

  • 谢谢。我必须看看这是否对我有帮助(我不是那么大的编码员,所以我需要一段时间来尝试代码)。
  • @user1644622 也尝试使用 PDO 扩展。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    Google AnalyticsIP 地址已经内置了此功能,但并不是跟踪访客人数的最佳方式。

    【讨论】:

      【解决方案4】:

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

      您想要实现的目标是实施某种形式的分析,这样您就可以确定有多少人正在访问您的网站,其中有多少是唯一访问者,并且还能够查看当前访问者的实时数据使用该网站。因此,更好的标题应该是“我如何获取有关谁在访问我的网站的信息?”。

      在表中存储 IP 地址是实现此目的的有效方法,但远非理想。我强烈建议使用Google Analytics(或类似的东西),因为这将使您能够看到所有这些信息以及更多信息,而且您不需要付出太多努力。您甚至不必成为编码员 - 您只需将他们提供的 sn-p 复制并粘贴到您的 HEAD 标签中。那里有很多关于如何做到这一点的信息,所以我不会详细介绍,但请随时询问您是否有任何问题。

      【讨论】:

      • 谢谢!我真的很高兴,您向我解释了我应该如何解决这个问题。我必须看看谷歌分析是否是一个好用的工具。我唯一的问题是,我不想有一个关于谁在访问我的网站的“长期”统计数据,我真正想要的是一个显示的工具,有多少人“现在”在我的网站上网站/服务器。所以它将是这样的文本:“8​​”人当前可用多少人可用的值应该始终是最新的。很抱歉没有把我的问题说清楚。
      • 你很幸运,谷歌分析现在正好提供了这个!在您设置“跟踪代码”并将代码的 sn-p 嵌入到您网站的每个页面(通常只在布局模板中一次)之后,您可以登录到您的帐户,单击顶部的“主页”导航栏,然后左侧导航栏上的“实时”。这目前处于测试阶段,但对我来说非常有用。作为额外的奖励,您不仅可以看到“网站上的 X 个活跃访问者” - 您还可以看到他们在哪个页面上以及他们是如何找到您的网站的。
      • 酷,听起来这正是我所需要的。 :) 非常感谢。
      【解决方案5】:

      将您的访问者存储到数据库中(与其他答案一样)。使用 datetime 字段来保存访问者最后一次请求的日期(您必须在每次综合浏览量时更新该行)。

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

      例如:

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

      【讨论】:

        猜你喜欢
        • 2013-03-13
        • 1970-01-01
        • 2012-05-18
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        • 2010-09-20
        • 2016-12-04
        • 2018-10-22
        相关资源
        最近更新 更多