判断用户是否在线的代码


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数组定义方法
Sep 10 Javascript
js中apply方法的使用详细解析
Nov 04 Javascript
Bootstrap 模态框(Modal)插件代码解析
Dec 21 Javascript
简单的jQuery拖拽排序效果的实现(增强动态)
Feb 09 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
Feb 23 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
Mar 01 Javascript
JS 60秒后重新发送验证码的实例讲解
Jul 26 Javascript
详解原生JS动态添加和删除类
Mar 26 Javascript
jQuery实现动态生成年月日级联下拉列表示例
May 11 jQuery
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 Javascript
vue3修改link标签默认icon无效问题详解
Oct 09 Javascript
jQuery实现高度灵活的表单验证功能示例【无UI】
Apr 30 jQuery
判断用户的在线状态 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
德生PL990,目前市面上唯一一款便携式插卡蓝牙全波段高性能收音机
2021/03/02 无线电
PHP加密技术的简单实现
2016/09/04 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
JavaScript的Function详细
2006/11/14 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
2014/12/31 Javascript
JS获取iframe中longdesc属性的方法
2015/04/01 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
JSONP基础知识详解
2017/03/19 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
VUE写一个简单的表格实例
2019/08/06 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
js实现扫雷源代码
2020/11/27 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
Python 基于Twisted框架的文件夹网络传输源码
2016/08/28 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
python实现图片中文字分割效果
2019/07/22 Python
Python换行与不换行的输出实例
2020/02/19 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
pycharm导入源码的具体步骤
2020/08/04 Python
古汉语文学求职信范文
2014/03/16 职场文书
超市开业庆典策划方案
2014/05/14 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
学籍证明模板
2014/11/21 职场文书
工程服务质量承诺书
2015/04/29 职场文书
新郎结婚感言
2015/07/31 职场文书
Vue Element-ui表单校验规则实现
2021/07/09 Vue.js
python基础之类属性和实例属性
2021/10/24 Python
MySQL的意向共享锁、意向排它锁和死锁
2022/07/15 MySQL