判断用户是否在线的代码


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 相关文章推荐
JSONP 跨域访问代理API-yahooapis实现代码
Dec 02 Javascript
Jquery显示、隐藏元素以及添加删除样式
Aug 09 Javascript
Document:getElementsByName()使用方法及示例
Oct 28 Javascript
Node.js模块封装及使用方法
Mar 06 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
Nov 01 Javascript
Vue组件库发布到npm详解
Feb 17 Javascript
JS 实现获取验证码 倒计时功能
Oct 29 Javascript
vue 使用vue-i18n做全局中英文切换的方法
Oct 29 Javascript
ES6入门教程之let、const的使用方法
Apr 13 Javascript
基于Proxy的小程序状态管理实现
Jun 14 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
Oct 16 Javascript
js实现tab栏切换效果
Aug 02 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP学习 变量使用总结
2011/03/24 PHP
PHP实现打包zip并下载功能
2018/06/12 PHP
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
微信JS接口汇总及使用详解
2015/01/09 Javascript
Bootstarp风格的toggle效果分享
2016/02/23 Javascript
原生JS和jQuery版实现文件上传功能
2016/04/18 Javascript
JavaScript数据类型转换的注意事项
2016/07/31 Javascript
js仿支付宝多方框输入支付密码效果
2016/09/27 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
jQuery实现动态控制页面元素的方法分析
2017/12/20 jQuery
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
Python 读写文件和file对象的方法(推荐)
2016/09/12 Python
python基础之入门必看操作
2017/07/26 Python
Python实现的求解最小公倍数算法示例
2018/05/03 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
Python基于进程池实现多进程过程解析
2020/04/30 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
集中采购方案
2014/06/10 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
OpenCV-Python实现人脸磨皮算法
2021/06/07 Python
redis数据一致性的实现示例
2022/03/18 Redis
R9700摩机记
2022/04/05 无线电