当用户在php中打开的一个选项卡中注销时,自动注销所有打开的选项卡

我正在使用php中的php会话概念。 使用jquery和php创建登录页面,并在我登录会话运行时为所有页面创建会话我可以在另一个选项卡中打开登录的URL,但是我在注销时遇到问题。

当我在其中一个已打开的浏览器选项卡中注销其他选项卡时,如果我刷新页面被注销,它仍会手动运行。 我的要求是当我在其中一个选项卡中注销时,其他选项卡应该自动注销而不是手动注销。

数据库文件

 

的login.php

  <?php include 'db.php'; if(isset($_SESSION['username']) && $_SESSION['username'] != '') { // Redirect to secured user page if user logged in echo 'window.location = "userpage.php"; '; } ?>   
Username
Password

欢迎主页

 <?php include 'db.php'; if(!isset($_SESSION['username']) || $_SESSION['username'] == '') { echo 'window.location = "login.php"; '; } ?>      

welcome to home page

logout

test link

https://stackoverflow.com/questions/33689846/logout-all-open-tabs-automatically-when-user-logs-out-in-one-of-the-opened-tabs/logout.php

 <?php include 'library.php'; session_destroy(); unset($_SESSION['username']); unset($_SESSION['password']); echo 'window.location = "login.php"; '; ?> 

创建一个php页面:

checkStatus.php

   

现在每个页面都有这个jQuery代码:

 var _delay = 3000; function checkLoginStatus(){ $.get("checkStatus.php", function(data){ if(!data) { window.location = "logout.php"; } setTimeout(function(){ checkLoginStatus(); }, _delay); }); } checkLoginStatus(); 

因此,在某些延迟之后的每个页面都将重复调用一个js函数,它将通过对php文件(您已创建)进行ajax调用来检查登录状态。 如果用户从任何用户注销,它将破坏浏览器中的会话并使所有选项卡重定向到logout.php页面。

您需要有一个javascript侦听器来检查会话是否已被销毁;

 window.setInterval(function(){ /// call your function here to cechk the server }, 5000); 

您可以使用ajax检查用户的会话是否仍然设置。 在包含ajax之后,您应该调用bellow js函数

 var targetURL="login.php"; function auto_check_login(){ $.ajax({ url: "check_user_session.php", cache: false, success: function(data){ if(data != 1){ window.location=targetURL; //Redirect user to login page. } } }); } $(document).ready(function(){ auto_check_login(); //Call auto_check_login function when DOM is Ready }); //Call auto_check_login after 2 seconds setInterval(auto_check_login,2000); 

然后在check_user_session.php文件中,你可以拥有它

 session_start(); if( !isset($_SESSION['username']) || !isset($_SESSION['password']) ){ print 0; } else { print 1; } 

你必须检查$ _SESSION [‘username’]是否只设置了一次,但是多次。 检查此索引是否存在,如果不存在,则将用户重定向到登录页面。