判断用户是否在线的代码


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 相关文章推荐
JS实现浏览器菜单命令
Sep 05 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
JavaScript中undefined和null的区别
May 03 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
详解AngularJS跨页面传值(ui-router)
Aug 23 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
Nov 20 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
微信小程序实现留言板(Storage)
Nov 02 Javascript
AngularJS动态生成select下拉框的方法实例
Nov 17 Javascript
JS如何监听div的resize事件详解
Dec 03 Javascript
javascript函数式编程基础
Sep 15 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世纪万年历
2006/12/06 PHP
php连接mysql数据库代码
2009/03/10 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
PHP实现取得HTTP请求的原文
2014/08/18 PHP
php获取远程文件大小
2015/10/20 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
2018/12/21 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
JavaScript Array扩展实现代码
2009/10/14 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
JS实现仿QQ聊天窗口抖动特效
2015/05/10 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
jquery利用json实现页面之间传值的实例解析
2016/12/12 Javascript
详解Vue2中组件间通信的解决全方案
2017/07/28 Javascript
VUE实现一个分页组件的示例
2017/09/13 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
python实现日常记账本小程序
2018/03/10 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
Python configparser模块应用过程解析
2020/08/14 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
财务会计专业毕业生自荐信
2013/10/02 职场文书
后进基层党组织整改方案
2014/10/25 职场文书
活动总结模板大全
2015/05/11 职场文书
孔子观后感
2015/06/08 职场文书
行政处罚告知书
2015/07/01 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
python中opencv实现图片文本倾斜校正
2021/06/11 Python