一)程序步骤

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 会更好)

<?php
file_put_contents('user1_time.txt', time()); sleep(3); $t1 = file_get_contents('user1_time.txt'); $now = time(); if($now - $t1 == 3){
error_log("SUCCESS", 3, "debug.txt");
unlink('user1_time.txt');
}
?>

后端判断用户是否关闭浏览器(关闭网站相关的全部tab)的更多相关文章

  1. js、php 判断用户终端 、浏览器类型

    js 判断 用户使用终端 function isMobeil() { if ((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iP ...

  2. java后端判断用户是否关注公众号

    /** * 判断用户是否关注了公众号 * @param openid * @return */ public static boolean judgeIsFollow(String openid){ ...

  3. C#判断用户是手机访问还是PC访问

    今天在做一个wap网站时,需要限制PC用户访问.网上找了很多资料,效果都不怎么理想.其实原理就是根据HTTP_USER_AGENT判断检查用户在用什么浏览器,再根据业务做相应的逻辑处理. 代码如下: ...

  4. js判断用户关闭页面或浏览器

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  5. js判断获取浏览器关闭状态

    如题,js获取浏览器关闭状态,可实现判断选择是否关闭. <html> <head> <title> </title> </head> < ...

  6. 浏览器关闭使session失效的问题多种解决方式

    直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈   如果用户不点击网站的“退出”链 ...

  7. 如何让浏览器关闭后session失效

    llzzcc66 知道合伙人数码行家 推荐于2018-08-10   如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如 ...

  8. js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法

    js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法 javascript如何捕捉IE窗口失去焦点事件window.onblur = function(e) { //you code}; 弹框的 ...

  9. 获取IE浏览器关闭事件

    //关闭浏览器时才会触发此操作,刷新页面不执行 //n 检测鼠标相对于用户屏幕的水平位置 - 网页正文部分左:求出鼠标在当前窗口上的水平位置(参照:当前窗口右上角为0.0坐标) //m 网页正文全文宽 ...

随机推荐

  1. Namenode HA原理详解(脑裂)

    转自:http://blog.csdn.net/tantexian/article/details/40109331 Namenode HA原理详解 社区hadoop2.2.0 release版本开始 ...

  2. 图的基本算法(BFS和DFS)

    图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系.对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示. 图可以分为有向图和无向图,一般用G=(V,E)来表示图. ...

  3. SDRAM 学习笔记(一)

    前面几篇博客已经讲到了关于0V7725的相关驱动问题,那么OV7725驱动成功之后,设定OV7725输出RGB565格式,那么对于640x480x16,那么若是选用FIFO,应该设置为位宽16bit, ...

  4. 【转】【Centos】Centos下用upstart管理自己的服务程序

    Upstart是Ubuntu用来进行服务进程管理的服务,本文介绍如何利用upstart来通过Centos操作系统管理我们自己开发的应用程序. 什么时候要管理我们的应用程序?当我们开发出服务类的应用程序 ...

  5. VS自带的dbghelp.h文件 报错

    场景: 编译报错: 解决方法: 在#include <dbghelp.h> 之前 #include <Windows.h>

  6. [转]Android--多线程之Handler

    原文:http://www.cnblogs.com/plokmju/p/android_Handler.html 前言 Android的消息传递机制是另外一种形式的“事件处理”,这种机制主要是为了解决 ...

  7. nginx rewrite和根据url参数location

    最近项目中涉及到旧老项目迁移,需要在nginx上做些配置,所以简单学习了下,好记性不如烂笔头,先记下来. rewrite 首先查看下nginx是否支持rewrite: ./nginx -V 不支持说明 ...

  8. e797. 显示JSlider的标记

    The slider supports two levels of tick marks, major and minor. Typically, the minor tick-mark spacin ...

  9. unity----------------------四元数的概念

    作者:Yang Eninala链接:https://www.zhihu.com/question/23005815/answer/33971127来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...

  10. Android 4.4从图库选择图片,获取图片路径并裁剪

    转至 http://blog.csdn.net/tempersitu/article/details/20557383 最近在做一个从图库选择图片或拍照,然后裁剪的功能.本来是没问题的,一直在用 In ...