Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 网页编程 / PHP / PHP实现用户在线状态检测

PHP实现用户在线状态检测2014-04-06在写注册登录的时候,经常有需要检测用户状态.今天就专门研究了一下。还可以吧~不过应该还是有一些小的漏洞,先分享给大家,慢慢改进

这个是基于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")) {// 更新sessionif ((session("?login_account")) && (time() - session("access_time") > 60)) {session("access_time", time());}// 在线更新$ip = ip2long(get_client_ip());$online = M("Online");// 先删除在线表中 超过5分钟未活动的记录//$sql = " delete from __TABLE__where";$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)) { // 不存在在线记录,则清空sessionsession(null);} else {$map = array();$map["id"] = array("eq", $id);$data["lasttime"] = time();$data["lastip"] = $ip;$online->where($map)->save($data);}} else { // 不是登录用户游客unset($map);$map["lastip"] = array("eq", $ip);$id = $online->where($map)->getField("id");//dump($id);if (empty($id)) { // 不存在在线记录, 则添加$data = array();$data["uid"] = 0;$data["account"] = "Guest";$data["nickname"] = "游客";$data["lasttime"] = time();$data["lastip"] = $ip;$online->add($data);} else {$map = array();$map["id"] = array("eq", $id);$data["lasttime"] = time();$data["lastip"] = $ip;$online->where($map)->save($data);}}}} } ?>