判断用户是否在线的代码


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 相关文章推荐
jQuery之按钮组件的深入解析
Jun 19 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
Oct 23 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
JavaScript中setter和getter方法介绍
Jul 11 Javascript
jQuery利用sort对DOM元素进行排序操作
Nov 07 Javascript
JavaScript基础之this详解
Jun 04 Javascript
vue 2.0封装model组件的方法
Aug 03 Javascript
JavaScript读写二进制数据的方法详解
Sep 09 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
Mar 17 Javascript
js利用iframe实现选项卡效果
Aug 09 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 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自动加载方式集合
2016/04/04 PHP
php arsort 数组降序排序详细介绍
2016/11/17 PHP
实例分析PHP将字符串转换成数字的方法
2019/01/27 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
php加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
jquery 可排列的表实现代码
2009/11/13 Javascript
jQuery .tmpl(), .template()学习资料小结
2011/07/18 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
超级简单实现JavaScript MVC 样式框架
2015/03/24 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
easyui Droppable组件实现放置特效
2015/08/19 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
vue实现循环切换动画
2018/10/17 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
详解nodejs 开发企业微信第三方应用入门教程
2019/03/12 NodeJs
Flask实现图片的上传、下载及展示示例代码
2018/08/03 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
python TK库简单应用(实时显示子进程输出)
2019/10/29 Python
flask框架url与重定向操作实例详解
2020/01/25 Python
Django models filter筛选条件详解
2020/03/16 Python
python使用自定义钉钉机器人的示例代码
2020/06/24 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
美国购买当代和现代家具网站:MODTEMPO
2018/07/20 全球购物
应届生财务会计求职信
2013/11/05 职场文书
师德建设实施方案
2014/03/21 职场文书
法院信息化建设方案
2014/05/21 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
公司离职证明范本(汇总)
2014/09/10 职场文书
青岛导游词
2015/02/12 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书