我的网站上有一个嵌入式流,但我想在页面上提取实时观众的数量。有没有办法用 PHP / AJAX 来做到这一点,显示当前查看我的网页的人数?
3 回答
免责声明:很久以前我做过类似的事情,所以这里是丑陋的旧代码(我不会努力使看起来更好/不是当我第一次开始编程时,因为这只是为了让你了解如何做到这一点,而不是用勺子喂任何特定的代码)。
$timeout = time() - (20);
$sessid_exist = mysql_query("SELECT sessid FROM bw_sessions WHERE sessid='" . session_id() . "'") or die (mysql_error());
$sessid_check = mysql_num_rows($sessid_exist);
if ($_SESSION['bw_username']) {
$sql = mysql_query("UPDATE bw_sessions SET timestamp='" . time() . "', username='" . $_SESSION['bw_username'] . "' WHERE sessid='" . session_id() . "'");
} else {
if($sessid_check > 0){
$sql = mysql_query("UPDATE bw_sessions SET timestamp='" . time() . "' WHERE sessid='" . session_id() . "'");
} else {
$sql = mysql_query("INSERT INTO bw_sessions (id, username, sessid, timestamp, ip)
VALUES(null, '', '" . session_id() . "', '" . time() . "', '" . $_SERVER['REMOTE_ADDR'] . "')") or die (mysql_error());
}
}
$sql = mysql_query("SELECT distinct sessid FROM bw_sessions WHERE username='' AND timestamp >= '$timeout' ORDER BY timestamp DESC") or die (mysql_error());
$sql2 = mysql_query("SELECT distinct sessid,username FROM bw_sessions WHERE username!='' AND timestamp >= '$timeout' ORDER BY username DESC") or die (mysql_error());
$num_guests = mysql_num_rows($sql);
$num_reg = mysql_num_rows($sql2);
?>
<font size='1'>Currently Online: <br>
<?=$num_guests;?> Guests<br>
<?=$num_reg;?> Registered users
您只需要创建一个表并保存 session_id's.. 然后查询该表以获取任何“最近”活动。如果您想要实时更新,请将上面的代码(修改为您的表格设计)放在“online.php”中,并每隔 x 秒通过 jquery 调用它,或者您决定这样做。
像Clicky这样的东西应该适合你。
如果你在某个地方看到过,它可能是可能的,而且这种东西内置在大多数论坛软件中,并且在很多网站上都有使用,所以它可能并不难。
这样做的常用方法是从$_SERVER['REMOTE_ADDR']获取已连接访问者的 IP,然后将其写入文件,并将所有唯一 IP 相加以找出有多少人已连接。这将需要某种清理功能来删除任何不再连接的 IP。
该脚本在页面加载时运行,并对文件中的访问者进行计数,因此,如果使用 ajax,您会运行一个 PHP 脚本,每隔一段时间轮询该文件以动态更新计数,或者您可以在页面加载时执行此操作,但是 ajax 不是必需的,因为你可以用 PHP 来做。
如果您还不知道如何操作,那么首先要做的是弄清楚如何在$.ajax中运行 PHP 脚本,然后编写一个统计访问者的函数可能是下一个。