判断用户是否在线的代码


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 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
理解JavaScript变量作用域更轻松
Oct 25 Javascript
javascript复制对象使用说明
Jun 28 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
js中用window.open()打开多个窗口的name问题
Mar 13 Javascript
javascript html5实现表单验证
Mar 01 Javascript
JS ES6中setTimeout函数的执行上下文示例
Apr 27 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
Angular 4.0学习教程之架构详解
Sep 12 Javascript
vue监听键盘事件的快捷方法【推荐】
Jul 11 Javascript
详解JavaScript栈内存与堆内存
Apr 04 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 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新手用的Insert和Update语句构造类
2012/03/31 PHP
php三维数组去重(示例代码)
2013/11/26 PHP
Zend Framework上传文件重命名的实现方法
2016/11/25 PHP
PHP的重载使用魔术方法代码实例详解
2021/02/26 PHP
JavaScript面象对象设计
2008/04/28 Javascript
编写跨浏览器的javascript代码必备[js多浏览器兼容写法]
2008/10/29 Javascript
兼容IE和FF的图片上传前预览js代码
2013/05/28 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
js使用eval解析json(js中使用json)
2014/01/17 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
React 源码中的依赖注入方法
2018/11/07 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
js实现div色块拖动录制
2020/01/16 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
Python中的Numpy入门教程
2014/04/26 Python
浅谈flask截获所有访问及before/after_request修饰器
2018/01/18 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
如何利用Python写个坦克大战
2020/11/18 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
青年文明号事迹材料
2014/01/18 职场文书
婚礼答谢宴主持词
2014/03/14 职场文书
签约仪式策划方案
2014/06/02 职场文书
经营理念标语
2014/06/21 职场文书
派出所正风肃纪剖析材料
2014/10/10 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis