这篇文章主要介绍了基于PHP实现用户在线状态检测,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
这个是基于ThinkPHP框架的,其他的可以自己根据需求改
1.先新建一个tags.php文件,放在配置目录Conf下。
<?php
/*
* 添加行为
*
*/
return array(
action_begin => array(OnlineCheck),
);
?>
2.定义具体的功能
<?php
/*
* 定义行为: 在线更新
*/
class OnlineCheckBehavior extends Behavior {
//行为参数
protected $options = array(
ONLINE_CHECK => true, // 默认进行在线
ONLINE_CHECK_TIME => 10, // 默认5分钟未活动,说明已下线
);
public function run(&$params) {
if (C(ONLINE_CHECK)) {
// 更新session
if ((session(?login_account)) && (time() – session(access_time) > 60)) {
session(access_time, time());
}
// 在线更新
$ip = ip2long(get_client_ip());
$online = M(Online);
// 先删除在线表中 超过5分钟未活动的记录
$map[lasttime] = array(lt, time() – C(ONLINE_CHECK_TIME) * 60);
$icount = $online->where($map)->delete();
if (session(?login_account)) { // 如果是登录用户
$map = array();
$map[uid] = session(login_uid);
$map[lastip] = $ip;
$id = $online->where($map)->getField(id);
if (empty($id)) { // 不存在在线记录,则清空session
session(null);
} else {
$map = array();
$map[id] = array(eq, $id);
$data[lasttime] = time();
$data[lastip] = $ip;
&