我无法为“用户在线”功能设计mysql表。用Google搜索但找不到具体的解决方案。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:3)
一种可能性是保存数据库中每个用户的最后一个操作(作为时间戳),并说“在过去2分钟内执行某些操作的每个用户都在线”。
如果您使用ajax进行更新,例如,您将能够跟踪关闭页面的人员以及不关闭页面的人员。
答案 1 :(得分:2)
将会话存储在数据库,存储中 user_id作为额外字段 会议桌。
查询会话表以进行打开 会话
但要注意,会话不是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.'');