判断用户是否在线的代码


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 相关文章推荐
对xmlHttp对象的理解
Jan 17 Javascript
文本框中禁止非数字字符输入比如手机号码、邮编
Aug 19 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
Dec 29 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
微信小程序 教程之wxapp视图容器 swiper
Oct 19 Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
Apr 01 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
Sep 03 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
Apr 08 Javascript
JavaScript如何实现元素全排列实例代码
May 14 Javascript
使用vue cli4.x搭建vue项目的过程详解
May 08 Javascript
AutoJs实现刷宝短视频的思路详解
May 22 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
一个好用的分页函数
2006/11/16 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
php实现对文件压缩简单的方法
2019/09/29 PHP
javascript 二维数组的实现与应用
2010/03/16 Javascript
如何让easyui gridview 宽度自适应窗口改变及fitColumns应用
2013/01/25 Javascript
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
javascript简单实现滑动菜单效果的方法
2015/07/27 Javascript
jquery结婚电子请柬特效源码分享
2015/08/21 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
JS弹性运动实现方法分析
2016/12/15 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
微信小程序下拉刷新界面的实现
2017/09/28 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
2019/11/15 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
python求解水仙花数的方法
2015/05/11 Python
Python while 循环使用的简单实例
2016/06/08 Python
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
Python使用sort和class实现的多级排序功能示例
2018/08/15 Python
python绘制散点图并标记序号的方法
2018/12/11 Python
Python编程中flask的简介与简单使用
2018/12/28 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
2019/03/05 Python
html5中监听canvas内部元素点击事件的三种方法
2019/04/28 HTML / CSS
SmartBuyGlasses英国:购买太阳镜和眼镜
2018/01/29 全球购物
基层党组织建设整改方案
2014/09/16 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
大班下学期个人总结
2015/02/13 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书