php 判断客户端是否在线,判断用户是否在线的代码

考虑两种情况:

(1)用户关闭浏览器或重定向到其他网页

function exit_init() {

if(xmlhttp.readyState==4){

if(xmlhttp.status==200){ //

}

else{

alert("there was a problem accessing the server:"+xmlhttp.status);

}

}

}

//定义windows 的onbeforeunload 事件,当用户非正常退出即浏览器非正常关闭时,对用户登录状态进行处理

window.οnbefοreunlοad=function () {

//if(event.clientY<0||event.altKey) {

exit_request = false;

//创建请求对象

if (window.XMLHttpRequest) {

exit_request = new XMLHttpRequest();

if (exit_request.overrideMimeType){

exit_request.overrideMimeType('text/xml');

}

} else if (window.ActiveXObject) {

try{

exit_request = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {

try {

exit_request = new ActiveXObject("Microsoft.XMLHTTP");

} catch (e) {

}

}

}

if (!exit_request) {

alert("Your brower is not compatible the current opration.Please use the IE 5.0! ");

return false;

}

var url='null.php?userid='+document.getElementById("userid").value;

//定义页面调用的方法exit_init,不是exit_init();没有();

exit_request.onreadystatechange = exit_init;

exit_request.open('GET', url, true);

//禁止IE 缓存

exit_request.setRequestHeader("If-Modified-Since","0");

//发送数据

exit_request.send(null);

}

//}

说明:null.php用来将用户状态设为下线

(2)用户长时间不再浏览本网站

思路:创建表active_stat,属性有userid,lasttime,nowtime。用户每打开一次本网站,更改lasttime为当前时间now(),每隔1分钟更改nowtime为当前时间,判断nowtime-lasttime是否大于20分钟,若大于,则修改用户状态为下线

function test(userid){

setInterval("offline('"+userid+"')", 60000 ); //每隔1分钟执行一次

}

function offline(userid){

var xmlhttp=false;

try{

xmlhttp=new activeXObject('Msxml2.XMLHTTP');

}catch(e){

try{

xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');

}catch(e){

try{

xmlhttp=new XMLHttpRequest();

}catch(e){}

}

}

if(xmlhttp.readyState==4||xmlhttp.readyState==0)

{

xmlhttp.open('get','../user/include/offline.php?userid='+userid,false);

xmlhttp.onreadystatechange=function(){

if(xmlhttp.readyState==4){

if(xmlhttp.status==200){

//

}

else{ alert("there was a problem accessing the server:"+xmlhttp.status);}

}

}

xmlhttp.send(null);

}

}

offline.php

//连接数据库

$userid=$_GET["userid"];

pg_exec("update active_stat set nowtime=now() where userid='".$userid."';");

$result=pg_exec($dbconn,"select (nowtime-lasttime) as activetime from active_stat where userid='".$userid."'");

$str=pg_result($result,0,"activetime");

if(strlen($str)>16){

$array=explode(" ",$str);

$t=explode(":",$array[1]);

$t[0]=$t[0]+$array[0]*24;

$s=explode(".",$t[2]);

$t[2]=$s[0];

$y=((int)$t[0])*3600+((int)$t[1])*60+((int)$t[2]);

}

else{

$total_time=explode(".",$str);

$x=explode(":",$total_time[0]);

$y=((int)$x[0])*3600+((int)$x[1])*60+((int)$x[2]);

}

if($y>=1200){

pg_exec("update users set status='f' where userid='".$userid."';");

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值