现在想获取网站上面所有在线用户,有什么好的方法获取吗?
使用mysql内存表或者内存性nosql
如果表,表结构: id(自增ID),username(用户名),addtime(添加时间),updatetime(更新时间)
设定超时时间为20分钟。那么在线用户为
select count() from tbl where updatetime>=(NOW()-2060);
如果是nosql(redis为例),那么就更简单了
每个用户添加一个key,可以用usename的hash值,然后设置这个key的过期日期为20分钟。
获取时,只需要执行$redis->keys("session_*");获取所有用户
仅仅是个人想法,仅供参考。
http://www.thinkphp1.cn/topic/3217.html
存一个时间戳字段到 db
中,一旦用户有新的操作,类似刷新页面,跳转到其他页面的时候,就更新这个字段。
判断用户是否在线的话,只需要查询这个字段,然后比较当前时间戳,可以设定一个值,例如5分钟,如果差值小于5分钟,则判断用户在线,否则则判断用户离线。
题主可以这样来理解,当用户请求页面后,后端响应并把页面发送过去,之后用户和服务器之间是没有一个所谓的连接状态的,所以最方便的方法就是当用户做出一些活动时主动向后端发送消息,就相当于告诉服务器,"hello, Im still alive"
。但是实际上,你很难百分百做到获取用户的真实动作,例如浏览器意外关闭,网络故障等等。