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分钟未活动的记录
            //$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)) { // 不存在在线记录,则清空session
                    session(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);
                }
            }
        }
    }
 }
 ?>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索漏洞
, 框架
, thinkphp
, 状态
, 用户
检测
java实现用户在线状态、web检测用户在线状态、java监听用户在线状态、signalr 用户在线状态、微信开通状态在线检测,以便于您获取更多的相关知识。

时间: 2024-10-27 23:41:42

PHP实现用户在线状态检测的相关文章

ASP.NET实现用户在线检测的类源码

asp.net|在线|在线检测 //online.cs(用户在线检测)/*程序实现思路: 该用户有以下几个属性:name:用户名sessionID:用户ID,通过它唯一表示一个用户iswhere :附加信息,用户当前所在位置lasttime:用户登陆时间curtime:本次刷新时间 在客户端,使用一个IFRAME,装载一个刷新页面,每隔XX秒更新一下他的名字对应的curtime,就表示他仍然在 在服务器端,建立一个守护线程,每隔固定时间就运行一遍,然后判断当前所有用户列表中的时间间隔是否超出了规

关闭浏览器 用户状态-用户关闭浏览器怎么实时监控用户在线状态

问题描述 用户关闭浏览器怎么实时监控用户在线状态 用户关闭浏览器后,怎么实时的获取用户是在线还是离线状态呢,在global里面试了一下,不可行,还有没有其它好的建议啊?

一起谈.NET技术,浅谈思路严谨的用户在线状态控制【附部分C#参考代码】

我们经常会遇到: 1:客户购买了5个用户的许可,10个用户的许可,软件需要限制用户的并发数量,我知道就是Oracle的并发用户达到20个以上,那费用是非常昂贵的. 2:一个用户只能登录一次或者是一个账号在同一时间只能登录一个,若已经是登录了就不让再登录了,需要能控制用户的并发登录问题. 3:有的系统也需要能实现在线用户列表.用户的登录状态等,特别是即时消息功能的内部管理系统等. 先把自己的思路整理图贴出来如下: C/S的部分参考代码如下:这里为了实现定时获取消息的平滑,利用了线程的方式,这样不影

浅谈思路严谨的用户在线状态控制【附部分C#参考代码】

我们经常会遇到: 1:客户购买了5个用户的许可,10个用户的许可,软件需要限制用户的并发数量,我知道就是Oracle的并发用户达到20个以上,那费用是非常昂贵的. 2:一个用户只能登录一次或者是一个账号在同一时间只能登录一个,若已经是登录了就不让再登录了,需要能控制用户的并发登录问题. 3:有的系统也需要能实现在线用户列表.用户的登录状态等,特别是即时消息功能的内部管理系统等. 先把自己的思路整理图贴出来如下: C/S的部分参考代码如下:这里为了实现定时获取消息的平滑,利用了线程的方式,这样不影

AJAX应用之注册用户即时检测

ajax AJAX的无刷新机制使得在注册系统中对于注册名称的检测能即时显示. 常见的用户注册是用户输入用户名,后台程序检测数据库中用户名是否重复而做出注册的成功与失败之提示(当用户注册重名时将返回重新注册),或者稍微人性化一点就是在用户名文本框后添加一个检测按钮,让用户检测后再做注册. 以上操作,对于用户体验方面来说是比较"差劲"的,一个很好的用户体验就是:当用户输入完注册用户名后,Web系统应能即时检查并即时显示,并在检查和显示的同时不影响当前页面的操作.这也就是"异步获取

六款优秀的开源协作编辑工具

简而言之,协作编辑Collaborative Edit就 是多个人进行编辑.协作有好处也有风险.好处之一是更加全面/协调的方式,更好的利用现有资源和一个更加有力一致的声音.对于我来说,最大的好处是极大的 透明度.那是当我需要采纳同事的观点.同事之间来来回回地传文件效率非常低,导致不必要的延误还让人(比如,我)对整个协作这件事都感到不满意.有个好的 协作软件,我就能实时地或异步地分享笔记,数据和文件,并用评论来分享自己的想法.这样在文档.图片.视频.演示文稿上协作就不会那么的琐碎而无聊. 有很多种

php:检测用户当前浏览器是否为IE浏览器

/** * 检测用户当前浏览器 * @return boolean 是否ie浏览器 */ function chk_ie_browser() { $userbrowser = $_SERVER['HTTP_USER_AGENT']; if ( preg_match( '/MSIE/i', $userbrowser ) ) { $usingie = true; } else { $usingie = false; } return $usingie; } 以上是小编为您精心准备的的内容,在的博客.

ASPNET中实现在线用户检测(使用后台守护线程)

后台|在线 以下是我的类文件, //online.cs(用户在线检测)/*程序实现思路: 该用户有以下几个属性:name:用户名sessionID:用户ID,通过它唯一表示一个用户iswhere :附加信息,用户当前所在位置lasttime:用户登陆时间curtime:本次刷新时间 在客户端,使用一个IFRAME,装载一个刷新页面,每隔XX秒更新一下他的名字对应的curtime,就表示他仍然在 在服务器端,建立一个守护线程,每隔固定时间就运行一遍,然后判断当前所有用户列表中的时间间隔是否超出了规

Java Web中的入侵检测及简单实现

web 在Java Web应用程中,特别是网站开发中,我们有时候需要为应用程序增加一个入侵检测程序来防止恶意刷新的功能,防止非法用户不断的往Web应用中重复发送数据.当然,入侵检测可以用很多方法实现,包括软件.硬件防火墙,入侵检测的策略也很多.在这里我们主要介绍的是Java Web应用程序中通过软件的方式实现简单的入侵检测及防御. 该方法的实现原理很简单,就是用户访问Web系统时记录每个用户的信息,然后进行对照,并根据设定的策略(比如:1秒钟刷新页面10次)判断用户是否属于恶意刷新. 我们的入侵