zl程序教程

您现在的位置是:首页 >  其他

当前栏目

判断用户是否在线的代码

代码 用户 判断 是否 在线
2023-06-13 09:14:27 时间
考虑两种情况:
(1)用户关闭浏览器或重定向到其他网页
复制代码代码如下:

<scripttype=text/javascript>
functionexit_init(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){//
}
else{
alert("therewasaproblemaccessingtheserver:"+xmlhttp.status);
}
}
}
//定义windows的onbeforeunload事件,当用户非正常退出即浏览器非正常关闭时,对用户登录状态进行处理
window.onbeforeunload=function(){
//if(event.clientY<0||event.altKey){
exit_request=false;
//创建请求对象
if(window.XMLHttpRequest){
exit_request=newXMLHttpRequest();
if(exit_request.overrideMimeType){
exit_request.overrideMimeType("text/xml");
}
}elseif(window.ActiveXObject){
try{
exit_request=newActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
exit_request=newActiveXObject("Microsoft.XMLHTTP");
}catch(e){
}
}
}
if(!exit_request){
alert("Yourbrowerisnotcompatiblethecurrentopration.PleaseusetheIE5.0!");
returnfalse;
}
varurl="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分钟,若大于,则修改用户状态为下线
复制代码代码如下:

<scriptlanguage=javascript>
functiontest(userid){
setInterval("offline(""+userid+"")",60000);//每隔1分钟执行一次
}
functionoffline(userid){
varxmlhttp=false;
try{
xmlhttp=newactiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
}catch(e){
try{
xmlhttp=newXMLHttpRequest();
}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("therewasaproblemaccessingtheserver:"+xmlhttp.status);}
}
}
xmlhttp.send(null);
}
}
</script>
<BODYonLoad="test("<?echo$userid;?>");">

offline.php
复制代码代码如下:
<?php
//连接数据库
$userid=$_GET["userid"];
pg_exec("updateactive_statsetnowtime=now()whereuserid="".$userid."";");
$result=pg_exec($dbconn,"select(nowtime-lasttime)asactivetimefromactive_statwhereuserid="".$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("updateuserssetstatus="f"whereuserid="".$userid."";");
}
?>