判断用户是否在线的代码


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 相关文章推荐
通过MSXML2自动获取QQ个人头像及在线情况(给初学者)
Jan 22 Javascript
javascript来定义类的规范小结
Nov 19 Javascript
js实现addClass,removeClass,hasClass的函数代码
Jul 13 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
Apr 29 Javascript
js获取所有checkbox的值的简单实例
May 30 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
javascript实现获取一个日期段内每天不同的价格(计算入住总价格)
Feb 05 Javascript
Webpack 4.x搭建react开发环境的方法步骤
Aug 15 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
Dec 10 Javascript
深入Node TCP模块的理解
Mar 13 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
JS简易计算器实例讲解
Jun 30 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二维数组用键名分组相加实例函数
2013/11/06 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
php装饰者模式简单应用案例分析
2019/10/23 PHP
疯掉了,尽然有js写的操作系统
2007/04/23 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
jQuery级联操作绑定事件实例
2014/09/02 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
C#中使用迭代器处理等待任务
2015/07/13 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
Bootstrap模态框水平垂直居中与增加拖拽功能
2016/11/09 Javascript
ES6中Generator与异步操作实例分析
2017/03/31 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
vue实现文件上传读取及下载功能
2020/11/17 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
[00:05]ChinaJoy现场 DOTA2玩家高呼“CN DOTA BEST DOTA”
2019/08/04 DOTA
python 正则式使用心得
2009/05/07 Python
python微信撤回监测代码
2019/04/29 Python
Python3如何判断三角形的类型
2020/04/12 Python
Python二元算术运算常用方法解析
2020/09/15 Python
python 元组和列表的区别
2020/12/30 Python
python 简单的调用有道翻译
2020/11/25 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
Html5内唤醒百度、高德APP的实现示例
2019/05/20 HTML / CSS
土建工程师岗位职责
2014/06/10 职场文书
好的促销活动方案
2014/08/21 职场文书
php字符串倒叙
2021/04/01 PHP
Vue过滤器(filter)实现及应用场景详解
2021/06/15 Vue.js
css布局巧妙技巧之css三角示例的运用
2022/03/16 HTML / CSS