2015-11-13 68 views
5

中打开的选项卡中注销时,我正在使用php中的php会话概念。创建登录页面使用jQuery和PHP和创建会话的所有页面时,我登录会话运行我可以在另一个标签中打开登录的URL在其中工作很好,但我有一个问题在注销。注销所有打开的选项卡,当用户在php

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

DB文件

<?php 
    session_start(); 
    $con = mysqli_connect("localhost", "root", "","testing") or die ("Oops! Server not connected"); // Connect to the host 

?> 

的login.php

<?php 
    include 'db.php'; 
    if(isset($_SESSION['username']) && $_SESSION['username'] != '') 
    { // Redirect to secured user page if user logged in 

     echo '<script type="text/javascript">window.location = "userpage.php"; </script>'; 
    } 
?> 
<html> 

    <body> 
     <form> 
      <table class="mytable"> 
       <tr> 
        <td>Username</td> 
        <td> 
         <input type="text" name="username" id="username" class="as_input" value="s"/> 
        </td> 
       </tr> 
       <tr> 
        <td>Password</td> 
        <td> 
         <input type="password" name="password" id="password" class="as_input" value="s"/> 
        </td> 
       </tr> 
       <tr> 
        <td></td> 
       </tr> 
       <tr> 
        <td colspan="2"> 
         <input type="submit" name="login" id="login" class="as_button" value="Login &raquo;" /> 
        </td> 
       </tr> 
      </table> 
     </form> 

    </body> 
</html> 

欢迎主页

<?php 
    include 'db.php'; 
    if(!isset($_SESSION['username']) || $_SESSION['username'] == '') 
    { 
     echo '<script type="text/javascript">window.location = "login.php"; </script>'; 
    } 
?> 
<html> 
    <head> 
     <link rel="stylesheet" type="text/css" href="style.css"> 
    </head> 

    <body> 

     <div class="as_wrapper"> 

      <h2> 
       welcome to home page 
      </h2> 
      <a href="logout.php" class="a">logout</a><br><br> 
      <a href='#'>test link</a> 
     </div> 

    </body> 
</html> 

logout.php

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

?> 
+0

http://stackoverflow.com/questions/13513874/logout-all-open-tabs-automatically-when-user-logs-out-in-one-of-them – rocky

+0

谢谢@rocky。 – Sjay

+0

[当用户注销其中一个时自动注销所有打开的选项卡]的可能重复(http://stackoverflow.com/questions/13513874/logout-all-open-tabs-automatically-when-user-logs-out-其中一个) –

回答

9

创建一个PHP页面:在每一页

checkStatus.php

<?php 
    session_start(); 
    if(isset($_SESSION['username']) && $_SESSION['username'] != '') 
     echo true; 

    else 
     echo false; 
?> 

现在有这样的jQuery代码:

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

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

+0

谢谢@void .. – Sjay

+0

很高兴帮助,如果它解决您的问题善意考虑它投票并标记为一个正确的答案。 – void

3

你需要有一个JavaScript监听器来检查,如果会话已被破坏;

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

谢谢@ Yayo88。 – Sjay

0

您可以使用ajax来检查用户的会话是否仍然设置。 你应该到波纹管的js函数的调用已包含ajax

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; 
} 
0

你必须检查是否$ _SESSION ['username']不仅仅是一次,而是多次。 检查该索引是否存在,如果不存在,则将用户重定向到登录页面。

相关问题