Я работаю над концепцией php session в php. создала страницу входа в систему с использованием jquery и php и создала сеансы для всех страниц, когда я вошел в сеанс сеанса, я могу открыть зарегистрированные URL-адреса на других вкладках, для которых отлично работает, но у меня есть проблема при выходе из системы.
когда я выхожу на одну из открытых вкладок браузера на другие вкладки, все еще выполняется вручную, если я обновляю страницы, которые выходят из системы. Мое требование – когда я выхожу на одну из вкладок, другие вкладки должны автоматически выйти из системы, а не вручную.
Файл 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 »" /> </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>'; ?>
с<?php include 'library.php'; session_destroy(); unset($_SESSION['username']); unset($_SESSION['password']); echo '<script type="text/javascript">window.location = "login.php"; </script>'; ?>
с<?php include 'library.php'; session_destroy(); unset($_SESSION['username']); unset($_SESSION['password']); echo '<script type="text/javascript">window.location = "login.php"; </script>'; ?>
Создайте страницу 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, повторяющуюся, которая проверит статус входа, сделав ajax-вызов в php-файл (вы создали). Если пользователь выйдет из системы, он уничтожит сеанс в браузере и сделает все вкладки перенаправленными на страницу logout.php.
У вас должен быть слушатель javascript, который проверяет, был ли сеанс уничтожен;
window.setInterval(function(){ /// call your function here to cechk the server }, 5000);
Вы можете использовать ajax для проверки того, установлен ли сеанс пользователя . Вы должны сделать вызов функции jellow после того, как вы включили 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; }
Вы должны проверить, установлено ли $ _SESSION ['username'] не один раз, а много раз. Проверьте, существует ли этот индекс и, если нет, перенаправляет пользователя на страницу входа в систему.