Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何基于变量';进行onbeforeload触发的条件ajax调用;s值_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 如何基于变量';进行onbeforeload触发的条件ajax调用;s值

Javascript 如何基于变量';进行onbeforeload触发的条件ajax调用;s值,javascript,jquery,ajax,Javascript,Jquery,Ajax,我的脚本使用“onbeforeunload”、ajax和logout.php(用loggedin状态1或0更新mysql)来提供用户登录的“实时”状态。这样,如果用户关闭他们的标签,或者如果他们关闭他们的浏览器(未测试),mysql将能够跟踪他们的登录状态,而如果我监视cookies,他们仍然会显示为使用活动会话登录 问题是,这会导致每次页面刷新或href链接被单击时将我注销 我试图通过向onbeforeunload调用的ajax添加if语句来解决这个问题。如果变量为“var unload==t

我的脚本使用“onbeforeunload”、ajax和logout.php(用loggedin状态1或0更新mysql)来提供用户登录的“实时”状态。这样,如果用户关闭他们的标签,或者如果他们关闭他们的浏览器(未测试),mysql将能够跟踪他们的登录状态,而如果我监视cookies,他们仍然会显示为使用活动会话登录

问题是,这会导致每次页面刷新或href链接被单击时将我注销

我试图通过向onbeforeunload调用的ajax添加if语句来解决这个问题。如果变量为“var unload==true”,则将执行ajax注销。我的header.php脚本在所有站点页面上,我添加了var unload=true;(在每次加载页面时重置onbeforeunload触发的ajax)

对于我的链接,我尝试使用onclick通过设置unload=false来“关闭”ajax注销。 然后应该使用header.php的代码var unload=true再次“打开”,因为它位于每个页面上

现在它被关闭了,onbeforeunload没有触发ajax注销,F5刷新或关闭选项卡应该是这样的

if语句是否不识别变量?他们的方法更好吗?一如既往,我真的很感谢你的洞察力和帮助。多谢各位

下面是适用的代码。(我尝试使用localstorage变量。运气不好…)

header.php:

<script>
localStorage.setItem("unload","true");

window.onbeforeunload = function() { 

 if(localStorage.getItem('unload')=="true"){
 $.ajax({
        async:false,
        type:"POST",
        url: "/WIP/secure_login/logout.php",
        enctype: 'multipart/form-data',
        success: function(resp){
        window.alert("you should be logged out now.");

           }

    });
}
};
document.getElementsByClassName("nav-link").addEventListener("click", 
function(){
localStorage.setItem("unload","false");
};
</script>
const getPulse = () => $.get("/pulse.php");
setInterval(getPulse, 300000); // This fn will be fired every 5 minutes

setItem(“unload”、“true”);
window.onbeforeunload=函数(){
if(localStorage.getItem('unload')==“true”){
$.ajax({
async:false,
类型:“POST”,
url:“/WIP/secure\u login/logout.php”,
enctype:“多部分/表单数据”,
成功:功能(resp){
window.alert(“您现在应该注销了。”);
}
});
}
};
document.getElementsByClassName(“导航链接”).addEventListener(“单击“,
函数(){
setItem(“unload”、“false”);
};
demo.php

<?php
include '../header.php';
?>
<script>
document.getElementById("submit").addEventListener("click", function(){
localStorage.setItem("unload","false");

  $.ajax({
        async:true,
        type:"POST",
        url: "../header.php",
        enctype: 'multipart/form-data',
        success: function(result){
            location.reload();
        }   
    });
});
localStorage.setItem("unload","true");
</script>

document.getElementById(“提交”).addEventListener(“单击”,函数)(){
setItem(“unload”、“false”);
$.ajax({
async:true,
类型:“POST”,
url:“../header.php”,
enctype:“多部分/表单数据”,
成功:功能(结果){
location.reload();
}   
});
});
setItem(“unload”、“true”);

我们的期望是确定谁是积极的“loggedIn”,谁不是。您当前的方法是错误的。您可以实现以下目标:

我会这样做: 首先- 创建一个新页面,将其命名为
pulse.php
。此php文件将负责查询用户表中的$currentUser并更新时间戳(例如:
updated_at
),并可能将布尔列(例如:
active
)设置为true。这是可选的,取决于您的用户模型架构

下一个- 将以下javascript添加到header.php中:

<script>
localStorage.setItem("unload","true");

window.onbeforeunload = function() { 

 if(localStorage.getItem('unload')=="true"){
 $.ajax({
        async:false,
        type:"POST",
        url: "/WIP/secure_login/logout.php",
        enctype: 'multipart/form-data',
        success: function(resp){
        window.alert("you should be logged out now.");

           }

    });
}
};
document.getElementsByClassName("nav-link").addEventListener("click", 
function(){
localStorage.setItem("unload","false");
};
</script>
const getPulse = () => $.get("/pulse.php");
setInterval(getPulse, 300000); // This fn will be fired every 5 minutes
最后-
设置一个计划任务(即cron作业),以便在服务器上每隔5分钟运行一次。此任务将负责查询用户表,其中
USER.updated\u的时间从现在起超过5分钟(),并且USER.active=true
。此查询返回的任何结果都将是不再在线的用户(即关闭他们的浏览器选项卡)。您现在可以相应地更新这些用户记录。

我明白了,这一切的目的是跟踪谁在主动“登录”谁不是呢?也就是说,谁实时出现在网站上?是的,你能想到为什么onbeforeunload if语句不能像人们希望的那样运行的原因吗?是的,有很多原因…请看我的答案,以现实世界的方式解决你的问题。这是我问题的一个非常可行的解决方案。谢谢。我似乎无法获得时间域(mysl time format)使用time()进行更新(php函数)。它只显示一次,不会在每次调用查询时更新。