【发布时间】:2018-05-11 02:23:29
【问题描述】:
我的脚本使用“onbeforeunload”、ajax 和 logout.php(它使用登录状态 1 或 0 更新 mysql)来提供用户登录的“实时”状态。这样,如果用户关闭他们的选项卡,或者希望他们关闭浏览器(未经测试),mysql 将能够跟踪他们的登录状态,而如果我正在监视 cookie,他们仍然会显示为使用他们的活动会话登录。
问题是这会使每个页面刷新或单击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 不会按应有的 F5 刷新或关闭选项卡触发 ajax 注销。
if 语句不能识别变量吗?他们是解决这个问题的更好方法吗?一如既往,我非常感谢您的洞察力和帮助。谢谢。
以下是适用的代码。(我尝试使用本地存储变量。没有运气...)
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>
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>
【问题讨论】:
-
我明白了,所有这些的目的是跟踪谁是积极“登录”,谁不是? IE。谁实际上是实时在网站上的?
-
是的,您能想到为什么 onbeforeunload if 语句似乎没有按预期运行的任何原因吗?
-
是的,有很多原因...请参阅我的回答,了解解决问题的实际方法。
标签: javascript jquery ajax