作家
登录

判断用户是否在线的代码

作者: 来源:www.28hudong.com 2013-03-30 00:58:30 阅读 我要评论

考虑两种情况: (1)用户关闭浏览器或重定向到其他网页 复制代码 代码如下: <script type=text/javascript> 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.onbeforeunload=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); } //} </script> 说明:null.php用来将用户状态设为下线 (2)用户长时间不再浏览本网站 思路:创建表active_stat,属性有userid,lasttime,nowtime。用户每打开一次本网站,更改lasttime为当前时间now(),每隔1分钟更改nowtime为当前时间,判断nowtime-lasttime是否大于20分钟,若大于,则修改用户状态为下线 复制代码 代码如下: <script language=javascript> 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); } } </script> <BODY onLoad="test('<? echo $userid;?>');"> offline.php 复制代码 代码如下: <?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."';"); } ?>

  推荐阅读

  在jQuery 1.5中使用deferred对象的代码(翻译)

译者注:1. Deferred是jQuery1.5新增的一个特性,很多人把它翻译成 “异步队列”,我觉得比较靠谱,毕竟和“延迟”没啥关系,不过这篇文章中我还采用deferred这个单词。 2. 这篇文章在jQuery1.5发布博客中提到,也>>>详细阅读


本文标题:判断用户是否在线的代码

地址:http://www.17bianji.com/kaifa2/JS/24846.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)