博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
后端判断用户是否关闭浏览器(关闭网站相关的全部tab)
阅读量:6124 次
发布时间:2019-06-21

本文共 1419 字,大约阅读时间需要 4 分钟。

一)程序步骤

1、js 写一个定时请求后端(php),后端接收到请求到,把当前时间戳写入文件

2、php 阻塞,这里我写的是 30 秒,也就是 sleep(30)

3、获取当前时间和文件里的时间作比较,如果时间间隔为 30 秒,则表示前端已经没有请求了,视为用户关闭了所有网站相关的 tab

 

二)实现原理

首先,每一个请求过来时,都会立即更新文件里的时间戳,然后阻塞程序 30 秒;

那么,如果我设置的前端的定时请求为 17 秒,第二请求过来的时候,其实第一个请求还没处理完(因为阻塞了 30 秒);

当第一个请求阻塞结束,往下执行时,文件里的时间戳已经被第一个请求修改了,这时再用当前时间 减 文件里的时间戳,间隔肯定不是 30 秒了;

反之,如果减出来的间隔为 30 秒,则表示,文件时间戳没有被修改,也就是没有下一个请求了,视为用户关闭了所以网站链接,这时就可以做登出之类的日志记录了

 

三)部分代码

js:

function test(url){    var xmlhttp = new XMLHttpRequest();    xmlhttp.onreadystatechange = function(){        if(xmlhttp.readyState==4){            if(xmlhttp.status==200){                // console.log(xmlhttp.responseText);            }        }    }    xmlhttp.open("GET", url, true);    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    xmlhttp.send(null);}
window.setMyInterval = function(func, interval){    var nexttime    = interval;    var start        = new Date().getTime();    var now            = null;    var toffset        = 0; var i = 0; var timer = null; var gogogo = function(){ timer = window.setTimeout(function(){ i++; now = new Date().getTime(); toffset = now - (start + i * interval); nexttime = interval - toffset; func(); gogogo(); }, nexttime); }; // 先立即执行一次  func(); // 启动迭代器  gogogo(); return timer; } var i = 0;
window.setMyInterval(function(){
  test('test'+ ((i%2)+1) +'.php');   i++; }, 17000); test('test.php');

 

php:

test.php(实际使用时用 redis 会更好)

 

转载地址:http://wlgka.baihongyu.com/

你可能感兴趣的文章
Linux下的CPU性能瓶颈分析案例
查看>>
spring mvc入门
查看>>
2012在数据库技术会议上的讲话PPT打包
查看>>
【Android】 TextView设置个别字体样式
查看>>
python svn
查看>>
raise语句
查看>>
sequence2(高精度dp)
查看>>
ABP实战--集成Ladp/AD认证
查看>>
存储过程
查看>>
phpcms v9栏目列表调用每一篇文章内容方法
查看>>
python 自定义信号处理器
查看>>
luov之SMTP报错详解
查看>>
软件概要设计做什么,怎么做
查看>>
dwr
查看>>
java的特殊符号
查看>>
word2010中去掉红色波浪线的方法
查看>>
fabric上下文管理器(context mangers)
查看>>
JQuery-EasyUI Datagrid数据行鼠标悬停/离开事件(onMouseOver/onMouseOut)
查看>>
并发和并行的区别
查看>>
php小知识
查看>>