登出,关闭浏览器是离线。但如果用户直接关闭电脑,或直接断电。就没有执行到这两个事件了。
所以应该以用户在某段时间内有没有动作作为在线/离线的判断。在线用户可以用數據庫記錄,例如
例如表:online
id    主键
uid  用户id
lastonlinetime 最后在线时间用户每进入一个页面,或执行某个动作,都会update lastonlinetime。显示在线用户 select * from online where now()-lastonlinetime>300,没有动作300秒视为离线。

解决方案 »

  1.   

    首先  没有完整准确的在线人数的统计方式 只有个大概的估计1.和楼上一样的方式  每次打开新页面更新lastonlinetime2.前台js定时用ajax来上报用户lastonlinetime 如果time()-lastonlinetime小于10分钟视为下线  setInterval('ajax_refreshLastOnlineTime', 10*3600)3.用session方式    把session存在数据库中   设置session的gc_maxlifetime   当然gc的启动方式让这个不是特别准确  但是是最好的方式
      

  2.   

    不用数据库可以用memcache,redis等高速缓存系统来代替mysql