判断用户是否在线的代码


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."';"); 
} 
?>
Javascript 相关文章推荐
深入认识JavaScript中的函数
Jan 22 Javascript
js模拟实现Array的sort方法
Dec 11 Javascript
Javascript 代码也可以变得优美的实现方法
Jun 22 Javascript
浅析tr的隐藏和显示问题
Mar 05 Javascript
javascript打开word文档的方法
Apr 16 Javascript
JavaScript修改作用域外变量的方法
Mar 25 Javascript
微信小程序页面间通信的5种方式
Mar 31 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
Dec 05 Javascript
vue2.0 兄弟组件(平级)通讯的实现代码
Jan 15 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
May 18 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
Jun 28 Javascript
JavaScript实现点击自制菜单效果
Feb 02 Javascript
判断用户的在线状态 onbeforeunload事件
Mar 05 #Javascript
在多个页面使用同一个HTML片段《续》
Mar 04 #Javascript
在多个页面使用同一个HTML片段的代码
Mar 04 #Javascript
如何确保JavaScript的执行顺序 之实战篇
Mar 03 #Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
Mar 03 #Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
Mar 03 #Javascript
jQuery 操作option的实现代码
Mar 03 #Javascript
You might like
php中使用preg_replace函数匹配图片并加上链接的方法
2013/02/06 PHP
PHP封装的数据库保存session功能类
2016/07/11 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
js css后面所带参数含义介绍
2013/08/18 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
用move.js库实现百叶窗特效
2017/02/08 Javascript
使用contextMenu插件实现Bootstrap table弹出右键菜单
2017/02/20 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
使用Angular CLI进行单元测试和E2E测试的方法
2018/03/24 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
基于JavaScript获取base64图片大小
2019/10/18 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
vue自定义指令限制输入框输入值的步骤与完整代码
2020/08/30 Javascript
python备份文件以及mysql数据库的脚本代码
2013/06/10 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python实现学生管理系统
2018/01/11 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
关于python写入文件自动换行的问题
2018/06/23 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
亚马逊西班牙购物网站:amazon西班牙
2017/03/06 全球购物
2014学习全国两会精神心得体会2000字
2014/03/11 职场文书
演讲稿格式范文
2014/05/19 职场文书
揭牌仪式策划方案
2014/05/28 职场文书
机关保密承诺书
2014/06/03 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
领导班子“四风问题”“整改方案
2014/10/02 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
单位未婚证明范本
2014/11/25 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
钱学森观后感
2015/06/04 职场文书
后天观后感
2015/06/08 职场文书
二年级数学教学反思
2016/02/16 职场文书
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
2022/04/18 MySQL