如何实时检查用户是否在线


how to check user is online or not in real TIME

我目前正在尝试使用 php 会话变量在我的 SITE 的用户页面上显示所有在线用户。为此,每当用户登录或注销时,数据库中的列都会设置为"1"或"0"。但是,这并不完全有效,因为当用户关闭浏览器时,数据库不会更新(从而破坏会话)。那么有没有另一种方法可以检查是否设置了某个会话 ID?我还想知道推特和脸书是如何处理这个问题的?

你几乎拥有它。绝大多数网站处理此问题的方式是像您一样拥有一个表格,但它们会向其添加时间戳并在加载新页面时更新时间戳。

查询表时,您只需查找活动用户的最后五分钟,他们就是网站上的"实时"用户。

从技术上讲,您甚至不需要在该表中保留"登录/注销"值。如果他们在五分钟内登录,他们可能还在。

没有保证的、万无一失的、完全防弹的方式来检查用户是否在那里。您可以做一些棘手的JS来ping和关闭,您可以添加更多JS,当用户导航离开页面时,这些JS将尝试提醒数据库 - 但是在一天结束时,如果浏览器意外关闭,或者如果用户断电或网络,您将无法执行任何操作。

最重要的是,默认情况下,Web 浏览是无状态的,并且在服务器完成发送代码后不会与用户保持连接。我们能做的最好的事情就是在用户做一些新事情时更新一个表,并假设他们至少会存在几分钟。

我没有检查过,但Twitter和Facebook很可能有Javascript代码,当有人关闭页面时通知服务器,可能伴随着周期性的心跳和超时。

检查 onunload 事件和 XMLHTTPRequest,看看如何向 PHP 应用程序发出请求,通知用户离开(像 jQuery 这样的库可能会帮助你更轻松地做到这一点)。

用户的表格中添加一个字段"last_visit",并在每次用户访问您的网站时更新它

当用户登录您的网站时找到"last_visit"时间和当前时间,之后使用此功能

   $time_period = floor(round(abs($current_time - $last_visit)/60,2));
if ($time_period <= 10)
                    $online_offline_status = 1;  
                else 
                    $online_offline_status = 0;
            }

然后打印最终结果

    <?php if (
$online_offline_status == 0){ ?> 
<span style="color:#FF0000;">Offline</span> 
<?php } else if ($online_offline_status == 1) {?> 
<span style="color:#669900;">Online</span> 
<?php }?>