判断用户是否在线的代码


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全局函数使用简单说明
Mar 11 Javascript
获取当前点击按钮的id用this.id实现
Mar 17 Javascript
Bootstrap学习笔记之css组件(3)
Jun 07 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
Aug 04 Javascript
简单分析javascript中的函数
Sep 10 Javascript
JavaScript纯色二维码变成彩色二维码
Jul 23 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 Javascript
JavaScript中set与get方法用法示例
Aug 15 Javascript
深入理解Angularjs 脏值检测
Oct 12 Javascript
微信小程序实现星星评价效果
Nov 02 Javascript
为vue项目自动设置请求状态的配置方法
Jun 09 Javascript
JavaScript命令模式原理与用法实例详解
Mar 10 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与C#的值类型指向区别的详解
2013/05/21 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
php中分页及SqlHelper类用法实例
2017/01/12 PHP
PHP经典设计模式之依赖注入定义与用法详解
2019/05/21 PHP
PHP操作Redis常用命令的实例详解
2020/12/23 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
原生js仿jq判断当前浏览器是否为ie,精确到ie6~8
2014/08/30 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
2020/08/10 Javascript
python getopt 参数处理小示例
2009/06/09 Python
Python中Class类用法实例分析
2015/11/12 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
Python阶乘求和的代码详解
2020/02/14 Python
python3中datetime库,time库以及pandas中的时间函数区别与详解
2020/04/16 Python
python 实现全球IP归属地查询工具
2020/12/18 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
2020/12/31 Python
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
夜大毕业生自我鉴定
2013/10/31 职场文书
优秀的计算机专业求职信范文
2013/12/27 职场文书
校园报刊亭创业计划书
2014/01/02 职场文书
小学毕业感言50字
2014/02/16 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
产品发布会策划方案
2014/05/12 职场文书
超市促销活动总结
2014/07/01 职场文书
用人单位聘用意向书
2015/05/11 职场文书
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android