оба пользователя выходят из системы, если оба вошли в систему, но разные сценарии - PullRequest
0 голосов
/ 19 августа 2011
<?php
session_start();
session_destroy();
header("location:/index.php");
?>

Привет. У меня есть скрипт выхода, который выглядит так в моей программе. У меня есть 2 пользователя, которые входят в мою систему, администратор и клиент. Проблема в том, что оба пользователя вошли в систему, и я щелкаю ссылку выхода, например, на странице клиента, оба пользователя выходят из системы. Каково решение этой проблемы? спасибо.

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Исходя из вашего вопроса, я предполагаю, что вы тестируете как администратора, так и клиента в одном браузере. Если это так, то если вы не используете что-то вроде окна инкогнито в Chrome для одного из них, вы сохраняете один и тот же PHPSESSIONID для клиента и администратора. Это означает, что session_destroy(); для одного звонка session_destroy(); для обоих.

0 голосов
/ 19 августа 2011

Если оба пользователя вошли в систему на одном компьютере с использованием одного и того же браузера, вы очищаете данные сеанса за весь сеанс, вызывая 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 */
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...