Несколько администраторов войти в систему с PHP

Я пытаюсь создать сайт PHP с более чем одним администратором. У меня есть некоторые сомнения

  1. Как я могу проверить, вошел ли админ в систему? Я знаю, что должен использовать сеансы по соображениям безопасности, но как узнать, кто из администраторов вошел в систему?

  2. Должен ли я установить $_SESSION['username'] переменная, когда username выполняет вход в систему и отправляет файл cookie, содержащий username тоже? Таким образом, я знаю, кто он (или притворяется), и могу проверить, username фактически вошел в систему, проверяя $_SESSION['username'] перед показом страниц. Это безопасно?

2 ответа

Решение

Как я могу проверить, вошел ли админ в систему? Я знаю, что должен использовать сеансы по соображениям безопасности, но как узнать, кто из администраторов вошел в систему?

Так же, как вы проверяете, вошел ли обычный пользователь в систему. Конечно, сеанс. И обычный пользователь и администратор должны иметь $_SESSION['username'] установить. Чтобы сделать кого-то администратором, я думаю, вы используете флаг в БД, скажем, столбец access_level, ENUMs 1 => пользователь, 2 => Администратор. Поэтому, когда вы входите в систему, включите и эту сессию. $_SESSION['access_level'] скажет вам, если этот пользователь является администратором, и $_SESSION['username'] скажет вам свое имя пользователя.

Должен ли я установить переменную $_SESSION['username'], когда username выполняет вход в систему, и также отправить cookie, содержащий имя пользователя? Таким образом, я знаю, кто он (или притворяется), и могу проверить, действительно ли имя пользователя вошло в систему, проверяя $_SESSION['username'] перед показом страниц. Это безопасно?

Сессий достаточно. Они также устанавливают куки на сайте клиента. Не хранить дополнительные $_COOKIE['username'],

Я использую структуру MVC, поэтому я хотел бы построить что-то (модель, контроллер), чтобы использовать его также для операций входа / проверки учетных данных / выхода из системы. Какой самый элегантный (объектно-ориентированный) способ добиться этого?

В нескольких словах - модельный метод входа в систему. Если пользователь является администратором, нормальный и т. Д., Контроллер может сделать это, используя извлечение модели, которое запрашивает БД, принимая имя пользователя, пароль, уровень доступа и т. Д.

const USER_NORMAL = 1;
const USER_ADMIN = 2;

public function isAdmin() {
    $row = $this->_application->UserModel->login();
    if($row['access_level'] == self::USER_ADMIN) {
        return true;
    }
    return false;
}

У меня есть несколько сценариев (то есть сценарий "upload.php", позволяющий администраторам загружать файлы), к которым можно получить доступ, только если один из администраторов вошел в систему. Эти сценарии не являются представлениями, поэтому я не могу проверить вход (мой Намерение было проверить вход на уровне контроллера, прежде чем показывать страницы). Так как я могу сделать в этом случае?

Так что проверяйте контроллер, как вы хотите, с помощью метода выше.

if(!$this->UserController->isAdmin()) {
    header("Location: index.php");
}
else {
   // show page
}
  1. Вы должны установить сессию для имени пользователя и пароля (которые получаются из формы входа в систему). Затем вы подключаетесь к mysql и проверяете, если user_name_field = "username" && password_field = "passowrd" => пользователь вошел в систему Etc: "SELECT user_id,user_name FROM users WHERE user_name = "ABC" AND user_pass = "123456" Этот sql может возвращать пустой массив или массив из одного элемента. Если пустой массив => регистрация не проходит, иначе => logged
  2. Вам нужно только установить сеанс или cookie, следует знать, что: facebook.com сохранит пароль и userid = cookie. Вы не беспокоитесь о куки не безопасно
  3. в структуре MVC вы должны создать 1 представление для просмотра формы входа в систему, 1 функцию в классе контроллера для получения имени пользователя, пароля, 1 функцию модели для подключения и запроса sql, вернуть результат массива для этого контроллера. Этот процесс: действие пользователя в представлении, просмотр отправляет данные контроллеру, контроллер использует данные, подключается к базе данных с моделью и получает результат из модели для возврата для просмотра
  4. Вы должны возвратить false или перенаправить или предупредить, когда любой пользователь, не являющийся администратором, имеет доступ к странице загрузки

P/s: извините, если мой английский беспокоит вас. я просто использую гугл переводчик

Другие вопросы по тегам