Если оба пользователя вошли в систему на одном компьютере с использованием одного и того же браузера, вы очищаете данные сеанса за весь сеанс, вызывая session_destroy()
.В PHP сессия представляет собой взаимно-однозначные отношения между пользовательским агентом (браузером) и сервером.
Мне трудно представить себе практическую систему, в которой два разных человека могли бы войти в систему через один и тот же браузер.в то же время.Вообще говоря, система входа в систему имеет дело с одним пользователем одновременно.По сравнению со стандартными системами у вас здесь необычная настройка.Я бы предложил переосмыслить процедуру входа в систему, чтобы ваша система когда-либо имела дело только с одним пользователем за сеанс .
Однако, если действительно возможно, чтобы два пользователя могли одновременно войти в систему,тогда вам нужно будет отслеживать их состояния в переменной $_SESSION
отдельно.Когда один или другой выйдет из системы, а не уничтожит сеанс, просто очистите состояние для этого пользователя:
//logout.php
$logout_type = isset($_GET['type']) ? $_GET['type'] : false;
// check for a bunk logout_type, redirect if type isn't valid
if ($logout_type === false || ($logout_type != 'user' && $logout_type != 'admin'))
header("location:/index.php");
session_start();
// if this type's state isn't even set, then this isn't valid
if (isset($_SESSION['login_state'][$logout_type]) || $_SESSION['login_state'][$logout_type] == false)
header("location:/index.php");
//set the state as false
$_SESSION['login_state'][$logout_type] = false;
header("location:/index.php");
При ссылке на страницу выхода из системы используйте logout.php?type=user
илиlogout.php?type=admin
.Когда кто-то входит в систему, убедитесь, что установлена соответствующая переменная сеанса login_state
.
Теперь, где бы вам ни приходилось проверять состояние входа в систему, проверяйте так:
if (isset($_SESSION['login_state']['user']) && $_SESSION['login_state']['user'] == true) {
/* user is logged on */
}
if (isset($_SESSION['login_state']['admin']) && $_SESSION['login_state']['admin'] == true) {
/* admin is logged on */
}