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

如题,给个思路,谢谢。

第1个回答  2018-08-13
代码很简单,但实现逻辑自己要想明白,

网站头公共文件加下边代码,意思即每个页面都有包含下面这个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 用户名等这些,也不差这条更新命令,

第2个回答  2014-02-13
例如你的页面循环使用ajax发送消息 php接受到就在线 很久没接收到就下线了 好像新浪就这样吧本回答被网友采纳
第3个回答  2014-02-13
用session就行 登录进来的时候设置一个session 检查session的状态就行了追问

我如果想查看在线人数怎么计算session数量啊,如果对方直接关闭网页,sessionn清除,服务器怎么知道。

追答

session_start();
session_set_save_handler ("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");

session_set_save_handler中每个参数都是对应session每个事件的处理函数,比如要处理session关闭事件,你应该有一个函数叫做sess_close,在这个函数里面处理要做的事情。

追问

非常感谢,根据你的提示,我查了下资料,现在能实现将session信息保存到数据库了,还有个问题我想问下。1,如果某个用户登录了,将他的session信息保存到数据库中,我怎样从数据库中识别某个sessionid对于的是谁,进而查看他是否在线。2如果某个用户登录后,session信息保存到数据库中,如果他没有点退出登录,而是直接关闭页面。那他的信息保存到什么时候就没了。

追答

先在用户资料的数据库里设置一个字段 用来保存用户是否在线

然后用户登录进去就用 session_set_save_handler 用方法的sess_open 这部分 修改这个字段 当登出的时候用用sess_close在修改这个状态就行了

追问

谢谢,最后一个问题,如果用户非正常退出,而是直接关闭浏览器,那他的session信息应该也会消失吧,这个时候还会执行sess_close吗,如果不执行用什么方法再修改数据库中的字段。

追答

会执行的~

本回答被提问者采纳
第4个回答  2014-02-13
session多久刷新过一次,你可以判断例如是10分钟或5分钟内登录过,则判断为当前在线,注意这不是实时的判断

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网