资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

包含php数据库多用户监测的词条

php中如何判断用户是否在线

代码很简单,但实现逻辑自己要想明白,

创新互联建站成立于2013年,是专业互联网技术服务公司,拥有项目成都网站建设、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元修水做网站,已为上家服务,为修水各地企业和个人服务,联系电话:13518219792

网站头公共文件加下边代码,意思即每个页面都有包含下面这个php代码,总之你懂,

这样,只要有用户登陆,或者打开别的页面,就会往 all_user 表里 的action_time字段添

加操作时间, 当你检测用户是否在线,就把用户操作时间action_time转化为 几分钟前,小时前,

,知道每个用户是 几分几小时前操作,就可以把几分钟前的显示在线,而几小时前的,显示离线或几小时前,

例如用户15:30分登陆,打开几个页面,然后就关电脑或出门, 这时all_user 表已经记录了操作时间

网站可以用 wordTime($time)显示他的操作时间离现在为2分钟前,或20分钟前,将直接显示在线。

至于多少分钟不操作算离线,自己调分钟数

?php

strtotime("now"); //取服务器当前时间戳,得到值如1533213376

$sql="UPDATE all_user SET action_time=$action_time WHERE userid=$cook_userid";

//往用户表里更新 操作时间,具体要填自己的表名和用户名的 字段名

?

//======================下边功能代码可copy 直接用

?php  

function wordTime($time) {

$time = (int) substr($time, 0, 10);

$int = time() - $time;

$str = '';

if ($int = 2){

$str = sprintf('在线', $int);

}elseif ($int  60){

$str = sprintf('在线', $int);        //60秒内

}elseif ($int  300){

$str = sprintf('在线5', $int);        //5分钟内

}elseif ($int  1800){

$str = sprintf('在线+', floor($int / 60));       //30分钟内

}elseif ($int  3600){ 

$str = sprintf('%d分钟前', floor($int / 60));        //30-60分钟内

}elseif ($int  86400){

$str = sprintf('%d小时前', floor($int / 3600));

}elseif ($int  2592000){

$str = sprintf('%d天前', floor($int / 86400));

}elseif ($int  2592000*30){

$str = sprintf('%d月前', floor($int / 2592000));

}else{

$str = "";//date('Y-m-d', $time);

}

//调用方法,把值给到变量time 如: $time="1533213376";  echo wordTime($time);  结果将输出 20分钟前    

?

不存在频繁操作数据库问题,因为打开网页都要查询mysql 用户名等这些,也不差这条更新命令,

ThinkPHP登录检测

参考下我的登录处理

//定义处理后台登陆提交数据

public function login(){

if (!IS_POST) halt('页面不存在');

$username=I("username");

$pwd=I("password",'','md5');

//p($pwd);die;

//1.检查数据库中这个用户是否存在

$user=M('user')-where(array('username' = "$username"))-find();

//如果数据库中的用户不存在,或者存在但是密码不正确就报错。

if(!$user || $user['password']!=$pwd){

$this-error("用户名或密码错误!");

}

//如果上面条件都成立的话,每次登陆后更新下面数据

$data=array(

'id' = $user['id'],

'sign'=$user['sign'],

'shenfz'=$user['shenfz'],

'tel'=$user['tel'],

'weixin'=$user['weixin'],

'qq'=$user['qq'],

'logintime' = time(),

'loginip' = get_client_ip()

);

//更新数据库数据

M('user')-where(array('id' =$user['id']))-save($data);

if(in_array($user['zw'],array(1,2,3))){

$role=M('role_user')-where(array('user_id' = $user['id']))-getField('role_id',true);

}else{

$role=M('role_user')-where(array('user_id' = $user['id']))-getField('role_id');

}

//存取登陆session数据

session(C('USER_AUTH_KEY'),$user['id']);

session(username,$user['username']);

session(role,$role);

session(bm,$user['bm']);

session(tel,$user['tel']);

session(email,$user['email']);

session(zw,$user['zw']);

session(logintime,$date['logintime']);

session(loginip,$user['loginip']);

//存取session数据后跳转到后台用户列表页

if($user['username'] == C('RBAC_SUPERADMIN')){

session(C('ADMIN_AUTH_KEY'), true);

}

import('ORG.Util.RBAC');

RBAC::saveAccessList();

//插入用户操作日志

$content=$_SESSION['username'].date("Y-m-d H:i:s",time())."登入了日志任务系统";

$logs=array(

'userid' =$_SESSION[C('USER_AUTH_KEY')],

'operate' =time(),

'content' =$content,

'status' =0

);

//存取登录操作log信息

M('userlog')-add($logs);

//调整后台首页

$this-redirect('Admin/Index/index');

}

php怎样实现数据库监控功能

楼上说的还是要定时检测

不论怎么做,绕来绕去都是一样的,都是需要定时检测。

Ajax 控制一个异步PHP程序来检测数据库,然后返回值,供调用。

PHP如何判断用户是否登陆,防止同账号多登陆,

大概逻辑是这样的,如果要达到一个账号登陆了,要把另一个客户端上的统一账号踢掉,那么你需要用记录用户头token,和设备唯一识别号到数据库。

当用户登陆的时候,检测和用户uid相关的token表,如果已经有token了,并且本次的设备唯一识别号和已经登陆的识别号不一样,那么清空原有token,也就是将原来登陆的账号踢下线。记录新的设备识别号的token即可。

php大致代码如下:

$currentDeviceUUID=getDeviceUUID();

$uid = getUserId();

$token = generateToken();

select * from tokenTable where uid="$uid";

update set token=''  where uid="$uid";

insert into tokenTable (uid, token, deviceUUID) values("$uid", "$token", $currentDeviceUUID);

php检测当前在线人数有办法吗

原理:根据不同的IP统计出当前有多少人在线。

实现方式:可以用数据库,也可以用文本。

我这里用了文本实现。

$user_online = "count.php"; // 保存人数的文件

touch ( $user_online ); // 如果没有此文件,则创建

$timeout = 30; // 30秒内没动作者,认为掉线

$user_arr = file_get_contents ( $user_online );

$user_arr = explode ( '#', rtrim ( $user_arr, '#' ) );

print_r ( $user_arr );

$temp = array ();

foreach ( $user_arr as $value ) {

$user = explode ( ",", trim ( $value ) );

if (($user [0] != getenv ( 'REMOTE_ADDR' )) ($user [1] time ())) { // 如果不是本用户IP并时间没有超时则放入到数组中

array_push ( $temp, $user [0] . "," . $user [1] );

}

}

array_push ( $temp, getenv ( 'REMOTE_ADDR' ) . "," . (time () + ($timeout)) . '#' ); // 保存本用户的信息

$user_arr = implode ( "#", $temp );

// 写入文件

$fp = fopen ( $user_online, "w" );

flock ( $fp, LOCK_EX ); // flock() 不能在NFS以及其他的一些网络文件系统中正常工作

fputs ( $fp, $user_arr );

flock ( $fp, LOCK_UN );

fclose ( $fp );

echo "当前有" . count ( $temp ) . "人在线";


分享标题:包含php数据库多用户监测的词条
文章地址:http://cdkjz.cn/article/dsieids.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220