我目前正在尝试使用php会话变量在我的SITE用户页面上显示所有在线用户。为此,每当用户登录或注销时,数据库中的列都将设置为“1”或“0”。但是,这并不完全有效,因为当用户关闭浏览器时数据库不会更新(并因此破坏会话)。那么是否有另一种方法来检查是否设置了某个sessionid? 我也想知道twitter和facebook如何处理这个问题?
答案 0 :(得分:4)
你几乎拥有它。绝大多数网站处理问题的方法是像你一样拥有一个表,但是它们会为它添加时间戳并在加载新页面时更新时间戳。
查询表时,您只需查看活跃用户的最后五分钟,他们就是" live"网站上的用户。
从技术上讲,你甚至不需要保持"登录/退出"该表中的值。如果他们已经在5分钟内登录,那么他们可能还在。
没有保证,确定的,完全防弹的方式来检查用户是否在那里。你可以做一些棘手的JS打开和关闭,你可以添加更多的JS,当用户导航离开页面时会尝试提醒数据库 - 但是在一天结束时,如果浏览器是,你就无法做任何事情。意外关闭,或者如果该用户失去电力或网络。
除此之外,Web浏览默认是无状态的,并且在服务器完成代码发送后不保持与用户的连接。我们可以有效地做的最好的事情是当用户做一些新的事情时更新一个表,并假设他们至少会在几分钟左右。
答案 1 :(得分:2)
我没有检查过,但Twitter和Facebook很可能有Javascript代码,当有人关闭页面时会通知服务器,可能会伴随定期心跳和超时。
检查onunload event和XMLHTTPRequest,了解如何向PHP应用程序发出请求,通知用户离开(像jQuery这样的库可能会帮助您更轻松地完成这项工作)。
答案 2 :(得分:0)
将“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 }?>