摘要 腾兴网为您分享:php检测用户在线状态的实例代码,中国体育,掌上优云,盈益云,想看视频等软件知识,以及蓝色警戒,魔兽世界自动拾取,在线视频工具,泥石流图片,四年级暑假作业答案下册,葫芦娃头像,rmprepusb,电脑ocr软件,聚宝盆app,神话时代扩展版,保时捷中国,u8,南国书香节,macos壁纸,伤感文字壁纸等软件it资讯,欢迎关注腾兴网。以下代码ThinkPHP框架,实现检测用户的在线状态。 1.先新建一个tags.php文件,放在配置目录Conf下。 ?php /* * 添加行为 * */ return array('action_begin' = array('OnlineCheck'), ); ? 2.定义具体的功能 ?p...

以下代码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);}}}} } ?>

3,在具体登录的地方添加如下代码:

// 登录检测public function checkLogin() {// $this->redirect($url);$username = strtolower($this->_param('usr'));$pwd = $this->_param('pwd');$url = $this->_param('url'); // 目标地址$is_error = false;if (empty($username) or empty($pwd)) {$this->assign('error_msg', '用户名和口令不能为空');$is_error = true;}if (!$is_error) {$model = M('Usr');$map['account'] = $username;$map['upwd'] = strtoupper(md5($pwd));$icount = $model->where($map)->count();if ($icount == 1) {$list = $model->where($map)->find();// 检测用户是否在线if ($this->isOnline($list['id'])) {// if ($list['status']) {session('login_account', $username);session('login_nickname', $list['nickname']);session('last_time', toDate($list['last_time']));if ($list['last_ip']) {session('last_ip', long2ip($list['last_ip']));} else {session('last_ip', get_client_ip());}session('login_count', $list['login_count']);session('login_uid', $list['id']);session('login_pwd', $list['upwd']);session('access_time', time());//用户最后点击页面时间session超时使用///$map['id'] = $list['id'];$data['last_time'] = time();$data['last_ip'] = ip2long(get_client_ip());$model->where($map)->save($data);$model->where($map)->setInc('login_count', 1);// 检测是否有同一IP的记录,有更新,否则 添加$online = M('Online');$map = array();$map['lastip'] = ip2long(get_client_ip());$online_id = $online->where($map)->getField('id');if (empty($online_id)) {// 插入在线用户表$data = array();$data['uid'] = $list['id'];$data['account'] = $list['account'];$data['nickname'] = $list['nickname'];$data['lasttime'] = time();$data['lastip'] = ip2long(get_client_ip());$online->add($data);}else{ // 更新在线用户表$data = array();$data['uid'] = $list['id'];$data['account'] = $list['account'];$data['nickname'] = $list['nickname'];$data['lasttime'] = time();//$data['lastip'] = ip2long(get_client_ip());$online->where($map)->save($data);}} else {$is_error = true;$this->assign('error_msg', '此用户已被禁止登录!');}// if 结束} else {$is_error = true;$this->assign('error_msg', '此用户名已在其他电脑登陆,请' . C('ONLINE_CHECK_TIME') .'分钟后再试!');}} else {$is_error = true;$this->assign('error_msg', '错误的用户名或口令!');}}if ($is_error) {$this->display('login');} else {$this->redirect('Index/index'); //if (empty($url)) { //$this->redirect('Index/index'); //} else { //$this->redirect($url); //}}}/** * 检测用户是否在线 * @access private * @param int $uid 用户ID * @return Boolean true=不在线 */private function isOnline($uid) {$ip = ip2long(get_client_ip());$online = M('Online');$map['uid'] = array('eq', $uid);$list = $online->where($map)->find();if (empty($list)) { // 不存在return true;} else { // 存在,检测IP是否一致,否则,检测是否超过5分钟if ($list['lastip'] == $ip) {return true;} else {if ($list['lasttime'] < time() - C('ONLINE_CHECK_TIME') * 60) {return true;} else {return false;}}}}

以上就是PHP在线状态检测的代码,同一时间只有一个用户可以存在。

暂时没有考虑到非正常掉线等,cookie,session意外的处理。

相关推荐

php原生检测用户,php代码在线测试_php检测用户在线状态的实例代码相关推荐

  1. python十点半游戏代码_Python实现Pig Latin小游戏实例代码

    前言: 本文研究的主要是Python实现pig Latin小游戏的简单代码,具体介绍如下. Pig Latin是一个语言游戏. 步骤: 1.让用户输入一个英文单词 2.确保用户输入一个有效单词 3.将 ...

  2. python简单代码编写-python读写Excel表格的实例代码(简单实用)

    安装两个库:pip install xlrd.pip install xlwt 1.python读excel――xlrd 2.python写excel――xlwt 1.读excel数据,包括日期等数据 ...

  3. python读取txt文件代码-python批量处理txt文件的实例代码

    通过python对多个txt文件进行处理 读取路径,读取文件 获取文件名,路径名 对响应的文件夹名字进行排序 对txt文件内部的数据相应的某一列/某一行进行均值处理 写入到事先准备好的Excel文件中 ...

  4. python3爬虫实例代码-Python3爬虫带上cookie的实例代码

    Cookie的英文原意是"点心",它是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息,好像是服务器发送给客户的"点心".服务器可以根据Cookie来 ...

  5. php柱状图html代码,html5生成柱状图(条形图)效果的实例代码

    下面小编就为大家分享一篇html5生成柱状图(条形图)效果的实例代码.小编觉得挺不错的,现在分享给大家,也给大家一个参考.一起跟随小编过来看看吧 XML/HTML Code复制内容到剪贴板 (func ...

  6. java上传和下载文件代码_JavaWeb中上传和下载文件实例代码

    一丶先引入上传下载的lib 二丶上传的的servlet package com.test.action; import java.io.file; import java.io.fileoutputs ...

  7. android 方形按钮代码,Android中实现图文并茂的按钮实例代码

    效果图如下所示: 代码: android:orientation="horizontal" android:layout_width="match_parent" ...

  8. html页面小宠物代码大全,纯css3实现宠物小鸡实例代码

    最近看了很多关于css3的知识和文章,觉得css3用起来很方便,使用css3的话,在页面布局上可以省去很多不必要的代码.所以最近用css3仿写了我每天都照顾的宠物小鸡的模样,第一次写,有些细节处理的不 ...

  9. java服务端代码_Java Socket编程服务器响应客户端实例代码

    通过输入流来读取客户端信息,相应的时候通过输出流来实现. 服务端类的代码: import java.io.BufferedReader; import java.io.IOException; imp ...

  10. html中汉字代码变成数字代码,Angular.js 实现数字转换汉字实例代码

    AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 AngularJS 通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML. 下面通过本文给大家 ...

最新文章

  1. 树莓派开发7-Pi摄像头+mjpg-streamer
  2. 梯度下降算法到logistic回归
  3. 算法导论之图的基本算法
  4. 2017 Vue.js 2快速入门指南
  5. MOXy的对象图– XML和JSON的输入/输出局部模型
  6. 【JS 逆向百例】有道翻译接口参数逆向
  7. vim 正则非贪婪模式
  8. 【数据结构与算法】二叉查找树的Java实现
  9. python监控某个程序_写一个python的服务监控程序
  10. objective 修改plist文件
  11. IntelliJ IDEA设置--类代码模板自定义(注释)
  12. OpenCV 教程入门篇
  13. World Wind入门
  14. 小白系统初始化配置资源失败怎么办
  15. ModifyStyle函数
  16. 明日之后登不上去一直连接服务器,《明日之后》登不上去怎么办 明日之后进不去怎么回事...
  17. java 百度ocr文字识别_JAVA实现百度OCR文字识别功能
  18. 在有C语言的基础上,快速学习python(C语言转战python)(python3)
  19. SpringBooot:Redis:根据两地经纬度计算距离
  20. 圣诞祝福网页_意派Epub360丨圣诞营销H5的多种趣味玩法(案例+模板)

热门文章

  1. 华为机试真题 C++ 实现【数字涂色】
  2. Xmarks书签同步工具的用法
  3. 单元素/组件的过渡以及过渡钩子的运用
  4. 潇潇六月雨 input file里的JQ change() 事件的只生效一次
  5. 如何打造高质量的网页内容呢?
  6. 模拟人生 java 安卓版,超级模拟人生官方下载_超级模拟人生安卓版预约下载v1.0_3DM手游...
  7. h2o api java_H2O框架简介
  8. IE首页被篡改(手动修复)
  9. 卡耐基梅隆大学 计算机信息管理,CMU-喜报!G同学成功收到2017-Fall 卡耐基梅隆大学 计算机信息技术硕士AD一枚...
  10. rundll32 命令大全