2015-11-13 2 views
5

Я работаю над концепцией сеанса php в php. создала страницу входа в систему с использованием jquery и php и создала сеансы для всех страниц, когда я вошел в сеанс сеанса, я могу открыть зарегистрированные URL-адреса на других вкладках, для которых отлично работает, но у меня есть проблема при выходе из системы.Выйти из всех открытых вкладок автоматически, когда пользователь выходит на одну из открытых вкладок в php

Когда я выхожу на одну из открывшихся вкладках браузера, другие вкладки все еще запускаются вручную, если я обновляю страницы, которые выходят из системы. Мое требование - когда я выхожу на одну из вкладок, другие вкладки должны автоматически выйти из системы, а не вручную.

файл БД

<?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- in-one-of-them) –

ответ

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(); 

Так каждая страница после определенной суммы задержки вызовет функцию js repeatatively a, которая проверит статус входа, сделав ajax-вызов в php-файл (вы h аве создано). Если пользователь выйдет из системы, он уничтожит сеанс в браузере и сделает все вкладки перенаправленными на страницу logout.php.

+0

Спасибо @void .. – Sjay

+0

Рад, что это помогло, если оно решает вашу проблему, любезно рассматривая ее голосование и отмечая ее как правильный ответ. – void

3

Вы должны иметь яваскрипт слушателя, который проверяет, если сессия была уничтожена;

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

Спасибо @ Yayo88. – Sjay

0

Вы можете использовать ajax, чтобы проверить, установлен ли сеанс пользователя. Вы должны сделать вызов сильфона функции после того, как расслоение плотной вы включили 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'] устанавливается не один раз, а много раз. Проверьте, существует ли этот индекс и, если нет, перенаправляет пользователя на страницу входа в систему.

Смежные вопросы