判断用户是否在线的代码


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 相关文章推荐
看了就知道什么是JSON
Dec 09 Javascript
js验证是否为数字的总结
Apr 14 Javascript
JS+CSS设置img在DIV中只显示Img垂直居中的部分
Oct 24 Javascript
js获取html页面节点方法(递归方式)
Dec 13 Javascript
jquery插件bxslider用法实例分析
Apr 16 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
基于JavaScript创建动态Dom
Dec 08 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
Jul 07 Javascript
浅析JS中对函数function的理解(基础篇)
Oct 14 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
ES6学习之变量的两种命名方法示例
Jul 18 Javascript
Node.js爬虫如何获取天气和每日问候详解
Aug 26 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
ajax缓存问题解决途径
2006/12/06 PHP
php数组函数序列 之array_count_values() 统计数组中所有值出现的次数函数
2011/10/29 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
jquery如何实现点击空白处隐藏元素
2017/12/05 jQuery
JS计算距当前时间的时间差实例
2017/12/29 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
python翻译软件实现代码(使用google api完成)
2013/11/26 Python
Python中的hypot()方法使用简介
2015/05/18 Python
15行Python代码实现免费发送手机短信推送消息功能
2020/02/27 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
keras 读取多标签图像数据方式
2020/06/12 Python
Python实现一个优先级队列的方法
2020/07/31 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
Boden美国官网:英伦原创时装品牌
2017/07/03 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
请说出几个常用的异常类
2013/01/08 面试题
感恩母亲节演讲稿
2014/05/07 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
标准离婚协议书(2014版)
2014/10/05 职场文书
工伤私了协议书范本
2014/11/24 职场文书
应届生求职自荐信范文
2015/03/04 职场文书
大学生青年志愿者活动总结
2015/05/06 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
Python实战之疫苗研发情况可视化
2021/05/18 Python
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL
java中如何截取字符串最后一位
2022/07/07 Java/Android
MySQL索引失效场景及解决方案
2022/07/23 MySQL