用户在线时间统计的PHP实现
首先,我们介绍了涉及四个字段的数据表结构:代码如下:
复制代码代码如下所示:
UID:用户ID
session_id:的session_id系统产生的用户登录后,和PHP使用session_id获得()函数
login_time:登录时间
logout_time:登机时间
1,客户端向服务器发送请求,方法是在用户登录,用户名,session_id,login_time插入一条记录,然后设置一个定时器在JS的客户端,比如每10分钟向服务器发送请求,从而达到更新登出时间,目的当然,设置间隔时间短,数据可能会更准确。但相应的负载系统会更高,这可以根据实际情况设置合适的值。这种方法被广泛应用于网页游戏,因为几乎所有的请求都是Ajax请求的网页游戏,无需刷新页面。刷新页面后,计时器就失去了它的值,这就是这种方法的局限性。
2,服务器设置定时轮询脚本。该方法是在服务器端编写一个定时执行脚本,如在5分钟内执行。根据数据库中的记录,我们可以判断服务器上仍然存在的每一届session_id。如果有,我们更新logout_time不存在。这也可以准确地计算在线时间,但缺点是,它需要对服务器的控制。否则,它无法设置时间脚本。Linux系统可以实现通过crontab,和Windows系统可以通过计划任务完成。如果你只是买一个虚拟主机,这种方法也不适合你。
3,在用户处于活动状态时更新注销时间。这样,当用户处于非活动状态或退出时,数据库中自然存在的到达时间,这是本文的重点。
首先,成功的用户登录后,记录它的UID和session_id,呈现时间为登陆时间。现在的时间600s作为登出时间插入数据库。
代码如下:
复制代码代码如下所示:
美元美元的UID = _session { } = $ UID信息{id};
session_id美元=美元_session { session_id } = session_id();
login_time美元=时间();
logout_time =时间()600美元;
为SQL =插入member_login(UID,session_id,login_time,logout_time)值(UID session_id美元,美元,美元login_time,);
mysql_query($ SQL);
然后,当用户处于活动状态时,即单击页面时,如果会话存在或处于登录状态,则它将更新用户的登机时间。
代码如下:
复制代码代码如下所示:
如果($ _session { UID }){
_session UID UID =美元美元{ };
session_id美元=美元session_id _session { };
logout_time =时间()600美元;
为SQL = 更新member_login集logout_time =美元,美元logout_time UID = UID和session_id = $ session_id ;
mysql_query($ SQL);
}
这种方法的优点是实现起来比较简单,可以应用于大多数网站。没有额外的服务器需求,它也可以准确地计算用户的在线时间。
缺点也很明显,它增加了数据库的更新操作,增加了系统的负载,但是对于中小型站点来说不应该是个问题。