php不在线
‘壹’ php网站中,如何判断用户是否是在线的状态
普通http网站是一种无状态连接,每次一个请求,一个应答,没有长连接状态。
但是可以通过记录访问时间,来确定用户的状态。
用户登录后,每次访问,更新一下最近访问时间在数据库里
在用户页面的公共部分,做一个定时轮询,n秒一次(防止用户打开页面后放着不动,看资料或者做别的)
服务器端做一个定时,将最近时间在n秒内的用户设为在线状态,将最近时间大于n秒的(说明已经关了页面),设为离线状态。 如果是普通 web空间无法配置定时器,可以在每次用户访问时处理一次(如果用户量大,需要做时间判断,防止同时访问量多时多次重复处理,影响服务器性能)
如果能确定一个用户的访问,只有一个浏览器窗口,可以在窗口里加一个关闭事件(onbeforeunload),在此事件中发送一个退出请求,主动设为离线状态。这样状态管理会更完美一些
这样基本就可以完成一个在线状态的管理。具体n 设为多少可根据情况而定,一般5-30秒都是合理的,太短了服务器压力比较大,太长了误差会比较大
‘贰’ php中如何判断用户是否在线
代码很简单,但实现逻辑自己要想明白,
网站头公共文件加下边代码,意思即每个页面都有包含下面这个php代码,总之你懂,
这样,只要有用户登陆,或者打开别的页面,就会往all_user表里的action_time字段添
加操作时间,当你检测用户是否在线,就把用户操作时间action_time转化为几分钟前,小时前,
,知道每个用户是几分几小时前操作,就可以把几分钟前的显示在线,而几小时前的,显示离线或几小时前,
例如用户15:30分登陆,打开几个页面,然后就关电脑或出门,这时all_user表已经记录了操作时间
网站可以用wordTime($time)显示他的操作时间离现在为2分钟前,或20分钟前,将直接显示在线。
至于多少分钟不操作算离线,自己调分钟数
<?php
strtotime("now");//取服务器当前时间戳,得到值如1533213376
$sql="UPDATEall_userSETaction_time=$action_timeWHEREuserid=$cook_userid";
//往用户表里更新操作时间,具体要填自己的表名和用户名的字段名
?>//======================下边功能代码可直接用
<?php
functionwordTime($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";echowordTime($time);结果将输出20分钟前
?>
不存在频繁操作数据库问题,因为打开网页都要查询mysql 用户名等这些,也不差这条更新命令,
‘叁’ php买卖家不在线系统自动退款是如何实现
分别记录买家和卖家的最后登录日期,当日期超过交易期限,自动退款
‘肆’ php聊天系统怎么样判断用户是不是在线
这个其实有很多种处理方案,我给两个方案吧,
方案一、用户登陆成功后,将用户的信息,如用户ID保存到session当中去,然后我们去判断session当中是否有当前用户ID就可以判断出该用户是否在线了,然后用户退出的时候,将此session清除就可以啦;
方案二、
用户表设置一个字段,用于保存用户的登陆状态,如果用户登陆成功才设置成1,否则设置成0,然后当要判断用户是否登陆的时候,只要到数据库当中去取这个值判断就可以啦,用户退出前,要先将这个状态Update成0状态就可以啦,不过这样的话,当由于断电而非法关闭的时候,用户状态就没有办法更新到数据库当中啦;
两个方案自认为还是方案一要好些啦;