Posted in Javascript onMarch 05, 2011
考虑两种情况:
(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."';"); } ?>
判断用户是否在线的代码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@