2

我不确定执行此操作的最佳方法是什么,但我需要能够显示正在查看访问者正在查看的当前页面的访客数量。没有谁,有多少。

做这样的事情最简单的方法是什么?是否可以在没有数据库的情况下执行此操作,但可能使用 javascript 或 PHP?

输出将是“有 XX 人查看此页面”。

编辑: 这可以通过显示过去 15 分钟的唯一身份访问者数量来完成吗?我不会 100% 准确,但会为我的目的工作

4

2 回答 2

1

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 **//

这应该有效。

取自这里

于 2013-11-06T08:36:09.843 回答
1

我认为实时跟踪访问者的最简单方法是让每个访问者的客户端每 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% 精确的解决方案。

于 2013-11-06T08:36:19.687 回答