包含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://scyanting.com/article/dsieids.html