判断用户是否在线的代码


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 22 Javascript
js 函数的执行环境和作用域链的深入解析
Nov 01 Javascript
js时间日期和毫秒的相互转换
Feb 22 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
使用jQuery实现星级评分代码分享
Dec 09 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
即将发布的jQuery 3 有哪些新特性
Apr 14 Javascript
JS实现去除数组中重复json的方法示例
Dec 21 Javascript
vue router 跳转后回到顶部的实例
Aug 31 Javascript
vue2.0 如何在hash模式下实现微信分享
Jan 22 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
Aug 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
解析strtr函数的效率问题
2013/06/26 PHP
PHP查询网站的PR值
2013/10/30 PHP
php中session过期时间设置及session回收机制介绍
2014/05/05 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
PHP根据图片色界在不同位置加水印的方法
2015/07/01 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
PHP中遍历数组的三种常用方法实例分析
2019/06/24 PHP
如何取得中文输入的真实长度?
2006/06/24 Javascript
ASP.NET jQuery 实例9  通过控件hyperlink实现返回顶部效果
2012/02/03 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
浅谈轻量级js模板引擎simplite
2015/02/13 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
Nodejs高扩展性的模板引擎 functmpl简介
2017/02/13 NodeJs
纯js实现html转pdf的简单实例(推荐)
2017/02/16 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
JS非行间样式获取函数的实例代码
2018/06/05 Javascript
vue组件横向树实现代码
2018/08/02 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
Python3利用SMTP协议发送E-mail电子邮件的方法
2017/09/30 Python
Python中判断输入是否为数字的实现代码
2018/05/26 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
2014年个人售房协议书
2014/10/30 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis