如何获取mysql中当前登录的用户?
不要使用isOnline
字段作为其他建议。请使用lastSeen
字段。您可以在该字段中添加时间戳,并在每个页面视图中更新它。
如果您想在系统上轻松完成操作,则可以每隔几分钟更新一次(用户会话中的变量$lastUpdate
包含lastSeen
的最后一次更新的时间戳)。
要查找“在线”用户,可以选择在最近X分钟内为lastSeen
的所有用户,例如10分钟。
您无法知道在线用户的确切数量,因为您无法知道用户是在查看您的网页还是他/她已经关闭了它。无论如何,像这样的解决方案是一个很好的近似。
每小时或每天,根据您拥有的访问者数量,您可以运行一个过程来删除旧条目。
它比isOnline更好 –
我认为你需要有专门的标志在数据库或用于一些临时目录中的每个用户创建一个文件。
必须有你的用户表中的字段“isOnline”,其价值将是0或1
每当你更新为1,并在用户登录时用户注销时,你”会更新为0。
目前在线用户可以通过检索:
SELECT * FROM `users` WHERE `isOnline`='1'
您可以创建一个列名isOnline并设置它真当用户上网。然后,通过isAvailable列查询它
select * from users where isOnline = 'Y';
同样的问题,在Ananth的文章:如果用户不注销并离开页面? – dwalldorf
@ stivlo的解决方案要好得多:) –
刚刚创建的用户表中的字段到你的数据库中包含status
任何名称,将适合你,并与用户登录提交并与值true
上登录和false
在注销注销,而只是检查的真正更新值将为您提供所有登录用户...
我的方法是使用用户会话令牌。每次用户访问会话记录中的站点时间戳都设置为现在。如果会话在某段时间内未触及,它将从表中删除(通过cronjob或某些用户请求作为垃圾回收)。注销时也是如此。结构是sessid, user_id, last_seen_ts
。你可以加入这个表格与用户来获取他们的名字。 尽管只能使用一张表完成 - 不仅存储标记isOnline
,还有一些时间戳会使刚刚离开您网站的用户失效。
太通用的问题,至少发布用户表的结构... – aleroot
我们希望您自己试图解决这个问题,而不是要求社区为您提供完整的解决方案。当你有一些代码向我们展示,证明你有一些努力(即使它是错误的),请更新你的问题和标志重新打开。谢谢。 – Kev