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

一)程序步骤

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

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

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

二)实现原理

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

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

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

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

三)部分代码

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 gogogo = function(){
        window.setTimeout(function(){
            i++;
            now            = new Date().getTime();
            toffset        = now - (start + i * interval);
            nexttime    = interval - toffset;

            func();

            gogogo();
        }, nexttime);
    };

    gogogo();
}

var i          = 0;
window.setMyInterval(function(){
    test(‘test‘+ ((i%2)+1) +‘.php‘);
    i++;
}, 2000);

test(‘test2.php‘);

php:

test1.php

<?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‘);
}
?>

test2.php

<?php
require(‘test1.php‘);
?>

我想到实现方法就这个,按项目实际要求修改



时间: 2024-08-24 18:53:27

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

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

今天在做一个wap网站时,需要限制PC用户访问.网上找了很多资料,效果都不怎么理想.其实原理就是根据HTTP_USER_AGENT判断检查用户在用什么浏览器,再根据业务做相应的逻辑处理. 代码如下: 1 public class IsPhoneAttribute : ActionFilterAttribute 2 { 3 public override void OnActionExecuting(ActionExecutingContext filterContext) 4 { 5 strin

js 判断浏览器关闭事件 兼容所有浏览器

无论是从页签处关闭浏览器,还是关闭整个浏览器窗口,无论是 ie11,火狐,谷歌,苹果,还是ie6,都能兼容的浏览器关闭事件监听 在网上搜索了一天,虽然网上也有之类的代码,但是太繁琐,有时候还不可用.我也是在原有基础上修改的.经过了上述的浏览器测试,如果有不兼容的,欢迎提出意见一起学习. ? <script type="text/jscript" src="jquery-1.10.2.min.js"></script> <script t

用户关闭浏览器页器,弹出一个提示

function PageUnloader() { //當用戶退出時是否需要拋出一個提示 this.UnloadTips = true; var _this = this; this.Init = function() { //當用戶退出時拋出一個提示 window.onbeforeunload = function(e) { e = window.event || e; return _this.body_onbeforeunload(e); }; }; //Unload事件, 當用戶退出時是

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

直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,此举将会导致session失效,下面整理了一些解决方法,感兴趣的朋友可以参考下哈 如果用户不点击网站的“退出”链接,而直接关闭浏览器(或者强制关闭浏览器进程.死机等),服务器无法处理用户退出网站的请求,解决方式如下: 方式1:在每个页面中加入隐藏的IFrame,以异步刷新的方式定期刷新iframe页面,如每隔10S刷新一次,当服务器在一定的时间内未收到用户的刷新请求,则认为用户已经退出 优点:能在短时间内判断出用

获取IE浏览器关闭事件

//关闭浏览器时才会触发此操作,刷新页面不执行 //n 检测鼠标相对于用户屏幕的水平位置 - 网页正文部分左:求出鼠标在当前窗口上的水平位置(参照:当前窗口右上角为0.0坐标) //m 网页正文全文宽 20这个值是指关闭按钮的宽度 //b=false,鼠标在当前窗口内 水平坐标 //b= true;鼠标在当前窗口外 水平坐标 //y 垂直坐标 y>0鼠标在当前窗口内 ;y<0 鼠标在当前窗口外 //window.event.altKey 当alt键按下时,值为 TRUE ,否则为 FALSE

Win10 Edge浏览器关闭兼任列表的方法

2015年7月29日Windows10发布后,深受广大用户的喜爱.其中突出的一项功能莫过于Edge浏览器替代了原来的默认浏览器Internet Explorer.微软为Win10量身定做的全新Edge浏览器肩负着接替IE浏览器的使命,一直备受关爱.不过这款浏览器在Windows10正式版发布一周多以来的表现并不是很突出,甚至有些让人失望.除去内存占用高等性能因素外,"兼容性差"."过分依赖IE浏览器"也是用户不满意的关键因素.在浏览很多网站时,都会出现以下提示: 出

关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器

这篇文章主要介绍了关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器,需要的朋友可以参考下.希望对大家有所帮助 Firefox 和 IE 的浏览器各自实现了input历史记录的功能,可以简化输入时的麻烦,但是,有时候弹出的下拉框会挡住页面显示内容,而且在某些情况下也不需要对input框进行记录,如号码查询的input框,用户不会对同一个号码进行多次查询,就没有必要让浏览器记录. MSIE自定义了input 的扩展属性 autocomplete,置为off即可 <input typ

分步引导中,Js操作Cookie,实现判断用户是否第一次登陆网站

上一篇介绍了分布引导插件IntroJs的使用,本篇介绍通过Js操作cookie的方法. 分步引导的功能只适合与第一次登陆网站的新用户,不能每次登陆都提示分布引导,那么如何判断用户是否第一次登录网站呢? 通过Js操作浏览器Cookie,方法有很多种,大多数是通过js获取到cookie存储的键值对,然后找到需要的哪一个键,在判断值,但是这种方案比较繁琐,现在给出一种新的想法.手动设置一个字段到cookie中,这样每次只判断是否有这个字段即可.代码如下: 1 <script type="text

浏览器关闭后,Session会话结束了么?

今天想和大家分享一个关于Session的话题: 当浏览器关闭时,Session就被销毁了? 我们知道Session是JSP的九大内置对象(也叫隐含对象)中的一个,它的作用是可以保 存当前用户的状态信息,初学它的时候,认为Session的生命周期是从打开一个浏览器窗 口发送请求到关闭浏览器窗口,但其实这种说法是不正确的!下面就具体的去解释: 当用户第一次访问Web应用中支持Session的某个网页时,就会开始一个新的Session, 那么接下来当用户浏览这个Web应用的不同网页时,始终处于一个Se