我不确定执行此操作的最佳方法是什么,但我需要能够显示正在查看访问者正在查看的当前页面的访客数量。没有谁,有多少。
做这样的事情最简单的方法是什么?是否可以在没有数据库的情况下执行此操作,但可能使用 javascript 或 PHP?
输出将是“有 XX 人查看此页面”。
编辑: 这可以通过显示过去 15 分钟的唯一身份访问者数量来完成吗?我不会 100% 准确,但会为我的目的工作
我不确定执行此操作的最佳方法是什么,但我需要能够显示正在查看访问者正在查看的当前页面的访客数量。没有谁,有多少。
做这样的事情最简单的方法是什么?是否可以在没有数据库的情况下执行此操作,但可能使用 javascript 或 PHP?
输出将是“有 XX 人查看此页面”。
编辑: 这可以通过显示过去 15 分钟的唯一身份访问者数量来完成吗?我不会 100% 准确,但会为我的目的工作
HTTP 是一种无状态协议,无法确定当前有多少访问者“在线”,因为除了显式登录之外,根本无法识别唯一用户。这一切都基于估计(例如,过去 10 分钟内来自不同 IP 的请求量),并且与访问者的计数器一样无用。当前浏览的用户数量或页面点击量绝对不能说明网站的质量。
最简单的方法是编写一个脚本,在数据库表中插入(或更新)IP 和时间/日期。然后计算唯一 IP 的数量并清除旧 IP。大多数网站看 10 分钟。为此目的的间隔;鉴于 HTTP 的性质。
调用[文件]“userCount.php”或其他东西并将其包含在标题的顶部,以便在每个页面点击时调用它。
// ** Begin userCount.php **//
$timestamp=time();
// 10 minutes of timeout
$timeout=$timestamp-6000;
// REPLACE instead of INSERT
mysql_query("REPLACE INTO online (time,ip) VALUES
('$timestamp','$REMOTE_ADDR')
WHERE ip = '$REMOTE_ADDR')";
// purge all old users
mysql_query("DELETE FROM online WHERE time < $timeout");
// delete my own ip adress from statistic
mysql_query("DELETE FROM online WHERE ip = 'xxx.xxx.xxxx.xxxx'");
$result=mysql_query("SELECT ip FROM online");
$user=mysql_num_rows($result);
echo $user;
// ** End userCount.php **//
这应该有效。
取自这里
我认为实时跟踪访问者的最简单方法是让每个访问者的客户端每 x 秒向您的脚本发送一个 ajax 请求,然后您继续跟踪表格或文本文件中的所有会话 ID/页面。如果会话 id 没有从特定页面发布一段时间,则将其删除。
如果您使用数据库进行操作。使用类似的表格
tracking
--------
sessionid (PK)
pageID (or pageURI)
last_seen (timestamp)
然后,您可以查询该表以获取(或多或少)访问该页面的当前用户的数量。
SELECT COUNT(*) visitors FROM tracking WHERE last_seen < DATE_SUB(NOW(), INTERVAL 30 SECONDS) GROUP BY pageID
但是,如果用户禁用了 javascript,这将不起作用,因此它不是 100% 精确的解决方案。