如何在FB中实现“用户在线”功能?

时间:2011-06-20 12:31:11

标签: php mysql database-design

我无法为“用户在线”功能设计mysql表。用Google搜索但找不到具体的解决方案。任何帮助,将不胜感激。谢谢。

4 个答案:

答案 0 :(得分:3)

一种可能性是保存数据库中每个用户的最后一个操作(作为时间戳),并说“在过去2分钟内执行某些操作的每个用户都在线”。

如果您使用ajax进行更新,例如,您将能够跟踪关闭页面的人员以及不关闭页面的人员。

答案 1 :(得分:2)

  1. 将会话存储在数据库,存储中 user_id作为额外字段 会议桌。

  2. 查询会话表以进行打开 会话

  3. 但要注意,会话不是100%代表真正在网站上的用户。 (会话超时)。

答案 2 :(得分:0)

答案 3 :(得分:0)

你可以建立在这样的东西上:

使用以下字段创建tblOnline表

id int not null auto_increment primary key
colSession text
colStamp int

当有人登录时,为他们创建一个会话变量:

session_start();
$_SESSION['online'] = md5(uniqid(rand(), true)); // Create a unique string

将唯一会话存储在tblOnline:

$stamp = time();
mysql_query('INSERT INTO tblOnline (colSession,colStamp) VALUES ('.$_SESSION['online'].','.$stamp.')');

当他们做某事(比如,页面重新加载)时,用当前时间戳更新colStamp:

$now = time();
mysql_query('UPDATE tblOnline SET colStamp = '.$now.' WHERE colSession = '.$_SESSION['online'].'');

让所有在线用户执行以下操作:

$timecheck = time()-(60*5); // 5 minutes back
$rs = mysql_query('SELECT * FROM tblOnline WHERE Stamp > '.$timecheck.'');
$num = mysql_num_rows($rs);
echo "There are: ".$num." users online right now!";

不时清理数据库中的旧会话数据(当然匹配colStamp):

$timeclean = time()-(60*60); // One hour back
mysql_query('DELETE FROM tblOnline WHERE Stamp < '.$timeclean.'');