判断用户是否在线的代码


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 AutoScroller 函数类
May 29 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
jquery实现兼容浏览器的图片上传本地预览功能
Oct 14 Javascript
js中indexof的用法详细解析
Dec 24 Javascript
详解JavaScript的while循环的使用
Jun 03 Javascript
微信小程序图片横向左右滑动案例
May 19 Javascript
让微信小程序支持ES6中Promise特性的方法详解
Jun 13 Javascript
Vue中定义全局变量与常量的各种方式详解
Aug 23 Javascript
vue-cli webpack 引入jquery的方法
Jan 10 jQuery
详解vue中移动端自适应方案
May 05 Javascript
解决layer弹出层自适应页面大小的问题
Sep 16 Javascript
vue和小程序项目中使用iconfont的方法
May 19 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 中的输出缓冲
2006/12/21 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
php之curl设置超时实例
2014/11/03 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
DWR Ext 加载数据
2009/03/22 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
JavaScript 原型继承
2011/12/26 Javascript
jquery的live使用注意事项
2014/02/18 Javascript
Bootstrap框架下下拉框select搜索功能
2020/03/26 Javascript
jQuery插件实现可输入和自动匹配的下拉框
2016/10/24 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
无法获取隐藏元素宽度和高度的解决方案
2017/03/07 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
JS计算输出100元钱买100只鸡问题的解决方法
2018/01/04 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
Python实现的批量下载RFC文档
2015/03/10 Python
python中os模块详解
2016/10/14 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
关于Pytorch的MLP模块实现方式
2020/01/07 Python
Django实现将views.py中的数据传递到前端html页面,并展示
2020/03/16 Python
django列表筛选功能的实现代码
2020/03/27 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
什么是Python中的匿名函数
2020/06/02 Python
keras 使用Lambda 快速新建层 添加多个参数操作
2020/06/10 Python
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
阿根廷网上配眼镜:SmartBuyGlasses阿根廷
2016/08/19 全球购物
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
英国网上超市:Ocado
2020/03/05 全球购物
大学校园生活自我鉴定
2014/01/13 职场文书
根叔历年演讲稿
2014/05/20 职场文书
公司人事管理制度
2015/08/05 职场文书
小学语文教学反思范文
2016/03/03 职场文书
Python中os模块的简单使用及重命名操作
2021/04/17 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
2021/10/16 Python